Namespaces
Variants

C++23

From cppreference.net

C++标准的当前修订版本。

目录

新语言特性

void f ( int & x )
{
if ( x )
goto END ;
x = 42 ;
END :
}
  • 初始化语句中的别名声明( using ),例如
for ( using T = int ; T e : v )
/* ... */

新库特性

新增模块

新增头文件

C 兼容性头文件:

库功能特性

通用工具集
协程库
诊断
算法、迭代器与范围
容器
编译期支持
内存管理
字符串与文本处理
输入/输出与打印

已弃用功能

已移除功能
  • 垃圾回收支持与基于可达性的泄漏检测。( P2186R2 )
  • 支持混合宽字符串字面量 拼接 ,例如 const auto * no = u "q" U "p" 属于非法格式。( P2201R1 )
  • 不可编码的宽字符字面量与多字符宽字符字面量,例如 wchar_t x = 'db' 属于非法格式。( P2362R3 )
已弃用功能
已撤销的弃用项
  • 下标表达式中的 operator, (逗号运算符)(但其语义已更改为支持可重载的多维下标 operator [ ] )。
  • 部分C语言头文件(为兼容C语言保留的对应 <*.h> 头文件)( P2340R1

缺陷报告

编译器支持

主要文章: C++23 compiler support

C++23 核心语言特性

C++23 特性

提案文档

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
字面量后缀 用于 (有符号) size_t ( FTM ) * P0330R8 11 13 19.43* 13.1.6* 6.5 2022.2 23.9
使 () lambda 表达式 更可选 P1102R2 11 13 19.44* 13.1.6* 6.3 2022.2 22.5
if consteval ( FTM ) * P1938R3 12 14 19.44* 14.0.0* 6.3 2022.2 24.1
移除垃圾回收支持 P2186R2 12 不适用 19.30* 不适用 不适用
static_assert constexpr if 中的窄化上下文转换 P1401R5 9 13 (部分)*
14
14.0.0* 2022.2 20.7
行拼接前修剪空白字符 P2223R2 6.7 2022.2
使声明顺序布局成为强制要求 P1847R4 2022.2
移除混合宽字符串字面量 拼接 P2201R1
显式对象成员函数 (推导 this )  ( FTM ) * P0847R7 14 18
19*
19.

C++23 标准库特性

C++23 feature

Paper(s)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
Stacktrace library ( FTM ) * P0881R7
P2301R1
12 (partial)*
14*
19.34*
<stdatomic.h> ( FTM ) * P0943R6 12 15 19.31* 14.0.3*
std::is_scoped_enum ( FTM ) * P1048R1 11 12 19.30* 13.0.0*
std::basic_string::contains() , std::basic_string_view::contains() ( FTM ) * P1679R3 11 12 19.30* 13.0.0*
std::to_underlying ( FTM ) * P1682R3 11 13 19.30* 13.1.6*
Relaxing requirements for time_point<>::clock P2212R2 N/A N/A N/A N/A
Providing size feedback in the Allocator interface  ( FTM ) * P0401R6 15 19.30* 14.0.3*
<spanstream> : string-stream with std::span -based buffer  ( FTM ) * P0448R4 12 19.31*
std::out_ptr() , std::inout_ptr() ( FTM ) * P1132R8 14 19 19.30*
constexpr type_info::operator==() ( FTM ) * P1328R1 12 17 19.33* *
19.34*
15.0.0*
Iterator pair constructors for std::stack and std::queue ( FTM ) * P1425R4 12 14 19.31* 14.0.3*
Non-deduction context for allocators in container deduction guides P1518R2 12 * 13 * 19.31* * 13.1.6* *
ranges::starts_with() and ranges::ends_with() ( FTM ) * P1659R3 17 (partial)*
18
19.31* 16.0.0*
Prohibiting std::basic_string and std::basic_string_view construction from nullptr P2166R1 12 13 19.30* 13.1.6*
std::invoke_r() ( FTM ) * P2136R3 12 17 19.31* 15.0.0*
Range constructor for std::basic_string_view P1989R2 11 14 19.30* 14.0.3*
Default template arguments for std::pair 's forwarding constructor P1951R1 14 14 19.30* 14.0.3*
Remove Garbage Collection and Reachability-Based Leak Detection ( library support ) P2186R2 12 14 19.30* 14.0.3*
zip: views::zip , views::zip_transform , views::adjacent , and views::adjacent_transform ( FTM ) * P2321R2 13 15 (partial)* 19.33* (partial)* * *
19.37*
14.0.3*
Heterogeneous erasure overloads for associative containers  ( FTM ) * P2077R3 19.32*
std::byteswap() ( FTM ) * P1272R4 12 14 19.31* 14.0.3*
Printing volatile T * P1147R1 11.3 14 19.31* 14.0.3*
basic_string::resize_and_overwrite() ( FTM ) * P1072R10 12 14 19.31* 14.0.3*
Monadic operations for std::optional ( FTM ) * P0798R8 12 14 19.32* 14.0.3*
std::move_only_function ( FTM ) * P0288R9 12 19.32*
Add a conditional noexcept specification to std::exchange P2401R0 12 14 19.25* 14.0.3*
Require std::span & std::basic_string_view to be TriviallyCopyable P2251R1 Yes Yes Yes Yes
Clarifying the status of the “C headers” P2340R1 Yes Yes Yes Yes
<expected> ( FTM ) * P0323R12
P2549R1
12 16 19.33* 15.0.0*
constexpr for <cmath> and <cstdlib> ( FTM ) * P0533R9 4.6 (partial)*
std::unreachable() ( FTM ) * P0627R6 12 15 19.32* 14.0.3*
Deprecating std::aligned_storage and std::aligned_union P1413R3 13 16 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary ( FTM ) * P2255R2 13 (partial)*
14
21 (partial)*
constexpr std::unique_ptr ( FTM ) * P2273R3 12 16 19.33* 15.0.0*
Constructing containers and strings from ranges with ranges::to() , tagged constructors, insert and assign member functions  ( FTM ) * ( FTM ) * P1206R7 14 (partial)*
15
17 19.34* 15.0.0*
Pipe support for user-defined range adaptors ( ranges::range_adaptor_closure , std::bind_back )  ( FTM ) * ( FTM ) * P2387R3 13 (partial)*
14
19 19.34*
ranges::iota() , ranges::shift_left() , and ranges::shift_right() ( FTM ) * ( FTM ) * P2440R1 13 (partial)* 19.34*
views::join_with ( FTM ) * P2441R2 13 19.34*
views::chunk and views::slide ( FTM ) * ( FTM ) * P2442R1 13 19.33*
views::chunk_by ( FTM ) * P2443R1 13 18 19.33* 16.0.0*
std::mdspan : a non-owning multidimensional array reference  ( FTM ) * P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (partial)*
18
19.39* 15.0.0*
<flat_map> ( FTM ) * P0429R9 15 20
<flat_set> ( FTM ) * P1222R4 15 21
ranges::find_last() , ranges::find_last_if() , and ranges::find_last_if_not() ( FTM ) * P1223R5 13 19 19.36*
Freestanding Library: Easy <utility> , <ranges> , and <iterator> P1642R11 13 * N/A
views::stride ( FTM ) * P1899R3 13 19.34*
Compatibility between std::tuple and tuple-like objects  ( FTM ) * P2165R4 14 2.9 (partial)* 19.36* (partial) *
19.37*
partial*
Rectifying constant iterators, sentinels, and ranges. views:: as_const ( FTM ) * P2278R4 13 19.35* (partial)*
19.36*
Formatting Ranges  ( FTM ) * P2286R8 15 (partial)*
15.2
16 19.37* (partial)*
19.39* (partial)*
19.41* (partial)*
19.42*
15.0.0*
Improve default container formatting ( FTM ) * P2585R1 15 16 (partial)*
17
19.42* 15.0.0*
Formatted output library <print> ( FTM ) * P2093R14
P2539R4
14 17 (partial)*
18
19.37* 15.0.0* *
16.0.0*
Formatting std::thread::id and std::stacktrace ( FTM ) * P2693R1 14 17 (partial)* 19.38* 15.0.0*
constexpr for integral overloads of std::to_chars() and std::from_chars() ( FTM ) * P2291R3 13 16 19.34* 15.0.0*
ranges::contains() and ranges::contains_subrange() ( FTM ) * P2302R4 13 18 (partial)*
19
19.34* 16.0.0* *
Ranges fold algorithms ( FTM ) * P2322R6 13 19.35*
views::cartesian_product ( FTM ) * P2374R4
P2540R1
13 19.37*
Adding move-only types support for comparison concepts ( equality_comparable , totally_ordered , three_way_comparable )  ( FTM ) * P2404R3 19.36*
Ranges iterators as inputs to non-ranges algorithms  ( FTM ) * P2408R5 19.34*
constexpr std::bitset ( FTM ) * P2417R2 13 16 19.34* 15.0.0*
basic_string::substr() && P2438R2 16 19.34* 15.0.0*
views::as_rvalue ( FTM ) * P2446R2 13 16 19.34* 15.0.0*
Standard Library Modules  ( FTM ) * P2465R3 15* 17 (partial)* 19.35*
(partial)*
19.36*
std::forward_like() ( FTM ) * P2445R1 14 16 19.34* 15.0.0*
Support exclusive mode for std::fstream ( FTM ) * P2467R1 12 18 19.36* 16.0.0*
views::repeat ( FTM ) * P2474R2 13 17 19.36* 15.0.0*
Relaxing range adaptors to allow for move-only types  ( FTM ) * P2494R2 14 17 19.34* 15.0.0*
std::basic_string_view range constructor should be explicit P2499R0 12.2 16 19.34* 15.0.0*
std::generator : synchronous coroutine generator for ranges  ( FTM ) * P2502R2
P2787R0
14 19.43*
Add a conditional noexcept specification to std::apply P2517R1 10 18 19.34* 16.0.0*
Explicit lifetime management ( std::start_lifetime_as )  ( FTM ) * P2590R2
P2679R2
Clarify handling of encodings in localized formatting of chrono types  ( FTM ) * P2419R2 15* 19.34* *
std::move_iterator should not always be input_iterator ( FTM ) * P2520R0 12.3* 17* 19.34* * 15.0.0*
Deduction guides update for explicit object parameter call operators LWG3617 14 19.34*
Deduction guides update for static operator ( ) P1169R4 13 16 19.39* 15.0.0*
Standard names and library support for extended floating-point types P1467R9 13 19.37* *
Monadic operations for std::expected ( FTM ) * P2505R5 13 17 19.36* 15.0.0*
views::enumerate ( FTM ) * P2164R9 13 19.37*
std::is_implicit_lifetime ( FTM ) * P2674R1 20
std::common_reference_t of std::reference_wrapper should be a reference type  ( FTM ) * ( FTM ) * P2655R3 19.37*
Disallowing user specialization of std::allocator_traits P2652R2 19 19.37*
Deprecating std::numeric_limits::has_denorm P2614R2 18 19.37* 16.0.0*
Making Multi-Param Constructors Of view s explicit P2711R1 17 (partial)* 19.36* * 15.0.0*
DR20: Relaxing Ranges Just A Smidge  ( FTM ) * P2609R3 15 20 19.37*
DR20: Stashing Stashing Iterators For Proper Flattening P2770R0 14 18 19.37*
DR17: std::visit() for classes derived from std::variant ( FTM ) * P2162R2 11.3 13 19.20* *
19.30*
13.1.6*
DR20: Conditionally borrowed ranges P2017R1 11 16 19.30*
DR20: Repairing input range adaptors and std::counted_iterator P2259R1 12 19.30* (partial)*
19.31*
DR20: views::join should join all views of ranges P2328R1 11.2 15 19.30* 14.0.3*
DR20: view does not require default_initializable ( FTM ) * P2325R3 11.3 16 19.30* 15.0.0*
DR20: Range adaptor objects bind arguments by value P2281R1 11 14 19.29 (16.10)*
(partial)*
19.31*
14.0.3*
DR20: constexpr for std::optional and std::variant ( FTM ) * ( FTM ) * P2231R1 11.3 (partial)*
12
13 (partial)*
19
19.31* 13.1.6* (partial)
DR20: views::lazy_split and redesigned views::split P2210R2 12 16 19.31* 15.0.0*
DR20: Fix ranges::istream_view P2432R1 12 16 19.31* 15.0.0*
DR20: view with ownership  ( FTM ) * P2415R2 12 14 19.31* 14.0.3*
DR20: Fixing locale handling in chrono formatters  ( FTM ) * P2372R3
P2418R2
13 19.31*
DR20: Cleaning up integer-class types P2393R1 19.32*
DR20: Compile-time format string checks; Reducing binary code size of std::format() family  ( FTM ) * P2216R3 13 14 (partial)*
15
19.32* 14.0.3*
DR20: Add support for non-const-formattable types to std::format P2418R2 13 15 19.32* 14.0.3*
DR20: std::basic_format_string P2508R1 13 15 19.35* 14.0.3*
DR20: Poison Pills are Too Toxic  ( FTM ) * P2602R2 14 19 19.36*
DR20: std::format fill character allowances P2572R1 14 17 19.37*
DR20: Improving std::format 's width estimation P2675R1 14 17 19.38*
DR20: std::barrier 's phase completion guarantees  ( FTM ) * P2588R3 19.28 (16.8)* *
19.36*


C++23 feature


Paper(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

* - 将鼠标悬停在标有星号 * 的单元格上可查看附加弹窗注释。
DR nn - "DR" 后的数字 nn 表示缺陷报告所适用的目标 C++ 修订版本,例如:DR20 → C++20。

外部链接

1. C++23 - 维基百科