C++23

来自cppreference.com
< cpp

下一代C++标准

新的语言特性

新的库特性

新模块

新标头

C 兼容性标头:

缺陷报告

编译器支持情况

主条目: C++ 编译器支持

C++23 核心语言功能特性

C++23 功能特性
 
提案
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(前 Portland Group/PGI)
Nvidia nvcc
(有符号) size_t字面量后缀 P0330R8 11 13

13.1.6*

6.5
使更多 lambda() 可以被省略 P1102R2 11 13

13.1.6*

6.3
if consteval P1938R3 12 14

14.0.0*

6.3
移除垃圾收集支持 P2186R2 12 19.30* 不适用
允许在 static_assertconstexpr if 中进行整数到 bool 的隐式转换 P1401R5 9 13 (部分)*
14

14.0.0*

剔除拼接符后的空白符 P2223R2
使类布局更遵守声明顺序 P1847R4
移除混合宽度字符串字面量拼接 P2201R1
推导 this P0847R7 19.32*
(部分)*
6.3
auto(x)auto{x} P0849R8 12 15

14.0.3*

6.4
更改 lambda 尾随返回类型的作用域 P2036R3 15
#elifdef#elifndef P2334R1 12 13

13.1.6*

6.5
constexpr 函数中的非字面类型变量(以及句标与 goto P2242R3 12 15

14.0.3*

6.3
一致的字符字面量编码 P2316R2 19.30*
字符集与编码 P2314R4 10
扩展初始化语句以允许别名声明 P2360R0 12 14

14.0.0*

多维数组下标运算符 P2128R6 12 15

14.0.3*

lambda 上的属性 P2173R1 9 13

13.1.6*

#warning P2437R1 是* 6.5
移除不可编码的宽字符字面量和多字符宽字符字面量 P2362R3 13 14
复合语句末尾的标签 P2324R2 13 16 6.5
划线的转义序列 P2290R3 13 15
命名的通用转义字符 P2071R2 13 15
放松 constexpr 的限制 P2448R2 13 17 (部分)
简化的隐式移动 P2266R3 13 13
static operator() P1169R4 13 16
可选的扩展浮点类型要求 P1467R9 13 不适用 6.4
从继承的构造函数中推导出类模板参数 P2582R1
[[assume]] 属性 P1774R8 13
支持 UTF-8 作为一种可移植的源文件编码 P2295R6 13* 15* 19.0 (Update 2)*
static operator[] P2589R0 13 16
允许 constexpr 函数中的 static constexpr 变量 P2647R1 13 16
延长范围 for 循环初始化器中临时变量的生命 P2718R0
DR20:有意义的导出 P2615R0 17 (部分)
DR20:consteval 需要向上传播 P2564R0 17
DR:C++ 标识符语法使用 Unicode 标准附录 31 P1949R7 12 14

14.0.0*

6.4
DR11:允许重复属性 P2156R1 11 13

13.1.6*

6.5
DR20:调整功能特性测试宏 __cpp_concepts 的值 P2493R0 12 19.32* 6.4
DR98:放宽 wchar_t 的要求以符合现有实现 P2460R2
DR:在常量表达式中使用未知的指针和引用 P2280R4
DR20:放宽相等性运算的重写规则 P2468R2 13 16
DR20:char8_t 兼容性和可移植性修复 P2513R4 13 16 19.34*
DR:澄清诊断指令报告的内容并允许 static_assert 模板上下文中使用非值依赖性表达式 CWG2518 13
C++23 功能特性
 
提案
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc

C++23 库功能特性

C++23 功能特性
 
提案
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
标准库
Embarcadero C++ Builder
标准库
Cray C++
标准库
栈踪库 P0881R7 12(部分)*
14*
19.34*
<stdatomic.h> P0943R6 12 15 19.31*

14.0.3*

std::is_scoped_enum P1048R1 11 12 19.30*

13.0.0*

basic_string/basic_string_viewcontains() P1679R3 11 12 19.30*

13.0.0*

std::to_underlying P1682R3 11 13 19.30*

13.1.6*

放松 time_point<>::clock 的要求 P2212R2 不适用 不适用
在分配器接口中提供大小反馈 P0401R6 15 19.30*

14.0.3*

<spanstream> :以 std::span 为基础的字符串流 P0448R4 12 19.31*
std::out_ptr()std::inout_ptr() P1132R8 19.30*
constexpr type_info::operator==() P1328R1 12 17 19.33**
19.34*
std::stackstd::queue 的迭代器对构造函数 P1425R4 12 14 19.31*

14.0.3*

容器推导指引中分配器的非推导语境 P1518R2 12 13 19.31*

13.1.6*

ranges::starts_with()ranges::ends_with() P1659R3 17 (部分)* 19.31*
禁止 basic_stringbasic_string_viewnullptr 构造 P2166R1 12 13 19.30*

13.1.6*

std::invoke_r() P2136R3 12 17 19.31*
basic_string_view 的范围构造函数 P1989R2 11 14 19.30*

14.0.3*

pair 的转发构造函数的默认模板实参 P1951R1 14 19.30*

14.0.3*

移除垃圾收集与基于可达性的泄漏检测(库支持 P2186R2 12 14 19.30*

14.0.3*

zip: views::zipviews::zip_transformviews::adjacentviews::adjacent_transform P2321R2 13 15 (部分)* 19.33*(部分)***
19.37*

14.0.3*

关联容器的异质擦除重载 P2077R3 19.32*
std::byteswap() P1272R4 12 14 19.31*

14.0.3*

打印 volatile T* P1147R1 11.3 14 19.31*

14.0.3*

basic_string::resize_and_overwrite() P1072R10 12 14 19.31*

14.0.3*

std::optional 的单子操作 P0798R8 12 14 19.32*

14.0.3*

std::move_only_function P0288R9 12 19.32*
std::exchange 添加条件性 noexcept 说明 P2401R0 12 14 19.25*

14.0.3*

要求 spanbasic_string_view可平凡复制 (TriviallyCopyable) P2251R1
澄清“C 头文件”的状况 P2340R1
<expected> P0323R12
P2549R1
12 16 19.33*
constexpr 的 <cmath><cstdlib> P0533R9 4.6 (部分)*
std::unreachable() P0627R6 12 15 19.32*

14.0.3*

弃用 std::aligned_storagestd::aligned_union P1413R3 13 16 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary P2255R2 13 (部分)*
constexpr std::unique_ptr P2273R3 12 16 19.33*
ranges::to() P1206R7 17 19.34*
用户定义适配器范围的管道支持(ranges::range_adaptor_closure, std::bind_back P2387R3 13 (部分)* 19.34*
ranges::iota()ranges::shift_left()ranges::shift_right() P2440R1 13 (部分)* 19.34*
views::join_with P2441R2 13 19.34*
views::chunkviews::slide P2442R1 13 19.33*
views::chunk_by P2443R1 13 18 19.33*
std::mdspan:非所有者的多维数组引用 P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (部分)*
<flat_map> P0429R9
<flat_set> P1222R4
ranges::find_last()ranges::find_last_if(),和 ranges::find_last_if_not() P1223R5 13 19.36*
独立库:更简单的 <utility><ranges><iterator> P1642R11 13* 不适用
views::stride P1899R3 13 19.34*
比较 std::tuple 和 tuple-like 对象 P2165R4 2.9(部分)* 19.36*(部分)*
19.37*
部分*
矫正常量迭代器、哨兵和范围 P2278R4 13 19.35* (部分)*
19.36*
格式化范围 P2286R8 16
改进容器的默认格式化 P2585R1 16(部分)*
17
格式化输出库 <print> P2093R14
P2539R3
17 (部分)* 19.37*
格式化 std::thread::idstd::stacktrace P2693R1 14 17(部分)* 19.38*
constexprstd::to_chars()std::from_chars() 对整数的重载 P2291R3 13 16 19.34*
ranges::contains()ranges::contains_subrange() P2302R4 13 19.34*
范围折叠算法 P2322R6 13 19.35*
views::cartesian_product P2374R4
P2540R1
13 19.37*
对仅移动类型添加可比较概念 (equality_comparabletotally_orderedthree_way_comparable) P2404R3 19.36*
非范围算法输入的范围迭 P2408R5 19.34*
constexpr 的 std::bitset P2417R2 13 16 19.34*
basic_string::substr() && P2438R2 16 19.34*
views::as_rvalue P2446R2 13 16 19.34*
标准库模块 P2465R3 17(部分)* 19.35*
(部分)*
19.36*
std::forward_like() P2445R1 16 19.34*
std::fstream 添加可执行模式 P2467R1 12 19.36*
views::repeat P2474R2 13 17 19.36*
放宽范围适配器对只移动类型的要求 P2494R2 14 17 19.34*
std::basic_string_view 范围构造函数 应为 explicit P2499R0 12.2 16 19.34*
std::generator:范围同步协程生成器 P2502R2
P2787R0
std::apply 添加条件 noexcept 说明 P2517R1 10 19.34*
显式生命周期管理 (std::start_lifetime_as) P2590R2
P2679R2
明确 chrono 类型本地化格式中编码的处理方法 P2419R2 19.34**
std::move_iterator 不应该总为 input_iterator P2520R0 12.3* 17* 19.34**
显式对象实参函数调用运算符 的推导指引更新 LWG3617 19.34*
static operator() 的推导指引更新 P1169R4 13 16
扩展浮点类型的标准名字以及库支持 P1467R9 13 19.37**
std::expected 的单子操作 P2505R5 13 17 19.36*
views::enumerate P2164R9 13 19.37*
std::is_implicit_lifetime P2674R1
std::reference_wrapperstd::common_reference_t 应该为引用类型 P2655R3 19.37*
禁止用户特化 std::allocator_traits P2652R2 19.37*
弃用 std::numeric_limits::has_denorm P2614R2 19.37*
std::barrier 的阶段完成保证 P2588R3 19.36*
view 创造 explicit 的多参构造函数 P2711R1 17(部分)* 19.36**
稍微放松 range 的要求 P2609R3 19.37*
储存储存迭代器以实现适当的扁平化 P2770R0 19.37*
DR17:std::variant 的派生类的 std::visit P2162R2 11.3 13 19.20**
19.30*

13.1.6*

DR20:条件性借用范围 P2017R1 11 19.30*
DR20:修复输入范围适配器std::counted_iterator P2259R1 12 19.30*(部分)*
19.31*
DR20:join_view 应结合所有范围 P2328R1 11.2 15 19.30*

14.0.3*

DR20:view 不要求 default_initializable P2325R3 11.3 16 19.30*
DR20:范围适配器对象按值绑定实参 P2281R1 11 14 19.29 (16.10)*
(部分)*
19.31*

14.0.3*

DR20:std::optionalstd::variantconstexpr P2231R1 11.3 (部分)*
12
13 (部分)* 19.31*

13.1.6* (部分)

DR20:lazy_split_view 与重新设计的 split_view P2210R2 12 16 19.31*
DR20:修复 views::istream_view P2432R1 12 16 19.31*
DR20:带所有权的 view P2415R2 12 14 19.31*

14.0.3*

DR20:修复 chrono 格式化器中的本地环境支持 P2372R3 19.31*
DR20:清理整数类类型 P2393R1 19.32*
DR20:std::format() 改进 P2216R3 13 14 (partial)*
15
19.32*

14.0.3*

DR20:为 std::format 添加不可 const 格式化类型的支持 P2418R2 13 15 19.32*

14.0.3*

DR20:std::basic_format_string P2508R1 13 15 19.35*

14.0.3*

DR20:放松对定制点对象的限制 P2602R2 14 19.36*
DR20:std::format 补齐填充字符 P2572R1 17 19.37*
DR20:改进 std::format 的宽度估计 P2675R1 17 19.38*
C++23 功能特性
 
提案
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
标准库
Embarcadero C++ Builder
标准库
Cray C++
标准库

* - 在版本号上停留可以查看注记
DRnn - 在 "DR" 后的数字 nn 表示应用该缺陷报告的目标 C++ 修订版本,例如 DR20 → C++20。