热门问题
时间线
聊天
视角
C++23
来自维基百科,自由的百科全书
Remove ads
C++23,正式名稱ISO/IEC 14882:2024[1],是繼C++20之後的C++程式語言開放標準。2020年2月,在布拉格舉行的C++20最終會議上,通過了C++23的總體計劃。[2][3]第一次針對C++23的WG21會議原定於2020年6月在瓦爾納舉行,但由於2019冠狀病毒病疫情而被迫取消。[4][5]原定於2020年11月在紐約召開的會議也被取消。[6] 該標準於2023年2月由WG21在伊瑟闊舉行的混合會議上從技術上最終確定。[7]
新的「Hello, world」範例
C++23引入了一些新功能,新的Hello, world程式範例如下:
#include <print>
int main()
{
std::println("Hello, world!");
}
特性
被接受納入 C++23 的變更包括:
- 顯式
this
對象參數[8] if consteval
[9]- 多維下標運算子[10]
- 靜態呼叫運算子、靜態下標運算子和靜態 lambda[11][12]
- 簡化隱式移動(implicit move)[13]
auto(x)
與auto{x}
初始化[14]- 新的預處理指令:
- 在基於範圍的 for 循環中延長某些臨時對象的生命周期[17]
- 新的標準屬性
[[assume(expression)]]
[18] - 繼承建構函式的類別模板參數推導[19]
- 複合陳述式(compound statement)末尾的標籤(label)[20]
- 初始化陳述式(init-statement)中允許別名聲明(alias declaration)[21]
- 為
std::size_t
及其對應有符號類型添加字面量字尾[22] - 擴充浮點類型及其字面量(有條件支援)[23]
- 允許可選省略零參數 lambda 表達式中的
()
[24] - Lambda 表達式上的屬性支援[25]
constexpr
相關改動:- 將
static_assert
和if constexpr
中的上下文收窄轉換(contextual conversion)收窄到bool
[29] - 在行拼接(line splicing)之前修剪空白字元[30]
- 強制聲明順序決定主記憶體佈局[31]
- 分隔的跳脫序列(delimited escape sequences)[32]
- 命名的通用字元跳脫(named universal character escapes)[33]
- 文字編碼相關變化:
- 用於範圍的同步協程
std::generator
[38]
- 結果類型
std::expected
[39] - 為
std::optional
[40] 和std::expected
[41] 添加單子操作 - 用於取得列舉底層值的工具函數
std::to_underlying
[42] - 僅抽取式的可呼叫包裝器
std::move_only_function
[43] std::forward_like
[44]std::invoke_r
[45]std::bind_back
[46]std::byteswap
[47]std::unreachable
:標記不可達代碼的函數[48]- 使
std::tuple
與其他「類似元組」的對象相容[49] - 為
std::reference_wrapper
提供std::basic_common_reference
特化以生成參照類型[50] - 為
std::pair
的轉發建構函式添加預設參數[51]
- 對以下內容添加
constexpr
支援: - 元程式設計工具:
- 為比較概念添加僅抽取式類型支援[60]
註釋
另見
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads