C++26
C++标准的下一代版本。
C++26 的当前国际标准制定日程: P1000R6 (2024-05-14)。
| 本节内容尚不完整 |
目录 |
新语言特性
新库特性
新增模块
新增头文件
- <contracts>
- <debugging>
- <hazard_pointer>
- <hive>
- <inplace_vector>
- <linalg>
- <rcu>
- <simd>
- <text_encoding>
C 兼容性头文件:
已弃用功能
已移除功能
| 本节内容尚不完整 |
已弃用功能
| 本节内容尚不完整 |
缺陷报告
编译器支持
主要文章: C++26 编译器支持
C++26 核心语言特性
|
C++26 特性
|
提案文档
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| DR98:从词法分析中移除未定义行为 | P2621R3 | 是 | 3.3 | 16.0.0* | |||||||
| DR98:使不可编码字符串字面量成为病式 | P1854R4 | 14 | 14 | 16.0.0* | |||||||
| 未求值字符串 | P2361R6 | 14 |
17 (部分)*
18 |
16.0.0* | |||||||
向
基础字符集
添加
@
、
$
和
`
|
P2558R2 | 15 | 是 | 16.0.0* | |||||||
| constexpr 从 void * 转换 ( FTM ) * | P2738R1 | 14 | 17 | ||||||||
| DR20:关于标准属性的可忽略性 | P2552R3 | 15 | 是 | ||||||||
| DR11:大括号初始化器的静态存储 | P2752R3 | 14 | |||||||||
| 用户生成的 static_assert 消息 ( FTM ) * | P2741R3 | 14 | 17 | ||||||||
| 无名称占位符变量 ( FTM ) * | P2169R4 | 14 | 18 | ||||||||
| <a href="language/p |
C++26 标准库特性
|
C++26 feature
|
Paper(s)
|
GCC libstdc++
|
Clang libc++
|
MSVC STL
|
Apple Clang*
|
|
|---|---|---|---|---|---|---|
| Testing for success or failure of <charconv> functions ( FTM ) * | P2497R0 | 14 | 18 | 16.0.0* | ||
| std::text_encoding : text encodings identification ( FTM ) * |
P1885R12
P2862R1 |
14 | ||||
| Arithmetic overloads of std::to_string and std::to_wstring use std::format ( FTM ) * | P2587R3 | 14 | ||||
| Type checking format args ( FTM ) * | P2757R3 | 15 | ||||
| Formatting pointers ( FTM ) * | P2510R3 | 14 * | 17 * | 19.40* * | ||
| Hashing support for std::chrono value classes ( FTM ) * | P2592R3 | |||||
| <rcu> : Read-Copy Update ( FTM ) * | P2545R4 | |||||
| <hazard_pointer> : Hazard pointers ( FTM ) * | P2530R3 | |||||
| ADL-proof std::projected | P2538R1 | 14 * | 18 * | 19.38* * | 16.0.0* | |
| constexpr stable sorting ( FTM ) * | P2562R1 | 15 | 21 | |||
| Member std::basic_format_arg::visit() ( FTM ) * | P2637R3 | 15 | 19 | |||
| Member std::variant::visit() ( FTM ) * | P2637R3 | 15 | 18 | |||
| std::is_within_lifetime ( FTM ) * | P2641R4 | |||||
| Extending associative containers with the remaining heterogeneous overloads ( FTM ) * | P2363R5 | |||||
| Enabling the use of std::weak_ptr as keys in unordered associative containers ( FTM ) * | P1901R2 | |||||
| Native handles in file streams ( FTM ) * | P1759R6 | 14 | 18 | 16.0.0* | ||
| Interfacing string streams with std::string_view ( FTM ) * | P2495R3 | 19 | ||||
| Interfacing std::bitset with std::string_view ( FTM ) * | P2697R1 | 18 | 16.0.0* | |||
| More constexpr for <cmath> and <complex> ( FTM ) * ( FTM ) * | P1383R2 | 4.6 (partial)* | ||||
| Adding the new 2022 SI prefixes on ratios: std::quecto , std::ronto , std::ronna , and std::quetta ( FTM ) * | P2734R0 | 14 | 17 * | |||
| std::function_ref : type-erased callable reference ( FTM ) * | P0792R14 | |||||
| std::copyable_function ( FTM ) * | P2548R6 | 16 | ||||
| std::bind_front , std::bind_back , and std::not_fn to NTTP callables ( FTM ) * ( FTM ) * ( FTM ) * | P2714R1 | |||||
| std::submdspan() ( FTM ) * |
P2630R4
P3355R1 |
|||||
| Freestanding language: Optional ::operator new | P2013R5 | N/A | ||||
| Freestanding std::char_traits , std::errc and facilities in: <charconv> , <cstdlib> , <cstring> , <cwchar> ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * | P2338R4 | N/A | ||||
| More freestanding facilities ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * | P2198R7 | N/A | ||||
| Saturation arithmetic ( FTM ) * | P0543R3 | 14 | 18 | 16.0.0* | ||
| <debugging> : Debugging support ( FTM ) * |
P2546R5
P2810R4 |
|||||
| <linalg> : A free function linear algebra interface based on the BLAS ( FTM ) * |
P1673R13
P3050R2 P3222R0 |
|||||
| Making assert() macro user friendly | P2264R7 | |||||
| Runtime format strings ( FTM ) * | P2918R2 | 14 | 18 | 16.0.0* | ||
| std::span over an initializer list ( FTM ) * | P2447R6 | 15 | 18 | 16.0.0* | ||
| std::span::at() ( FTM ) * | P2821R5 | 14 | 18 | 16.0.0* | ||
| Added tuple protocol to std::complex ( FTM ) * | P2819R2 | 15 | 19 | |||
| A new specification for std::generate_canonical | P0952R2 | 19.42* | ||||
| Removing deprecated typedef std::allocator::is_always_equal | P2868R3 | 15 | 18 | 16.0.0* | ||
| Removing function overload of std::basic_string::reserve() that takes no argument | P2870R3 | 18 | 16.0.0* | |||
| Removing deprecated Unicode conversion facets ( <codecvt> ) | P2871R3 | 18 | 16.0.0* | |||
| Freestanding: removing std::strtok ( FTM ) * | P2937R0 | 14 | 19.40* | |||
| Freestanding library: partial classes ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * | P2407R5 | 14 | 19.42* | |||
| Freestanding library: std::inout , std::expected , std::span ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * | P2833R2 | 14 | 19.42* | |||
| DR23: std::basic_const_iterator should follow its underlying type’s convertibility ( FTM ) * |
P2836R1
P2950R0 |
14 | 19.40* | |||
| DR20: std::make_format_args now accepts only lvalue references instead of forwarding references | P2905R2 | 14 | 18 | 19.40* | 16.0.0* | |
| DR20: Fix formatting of code units as integers ( FTM ) * | P2909R4 | 13.3 | 18 | 19.40* | 16.0.0* | |
| views::concat ( FTM ) * | P2542R8 | 15 | ||||
| Concatenation of strings and string views ( FTM ) * | P2591R5 | 15 | 19 | |||
| Enabling list-initialization for algorithms ( FTM ) * |
P2248R8
P3217R0 |
15 | ||||
| std::ranges::generate_random ( FTM ) * | P1068R11 | |||||
| Comparisons for std::reference_wrapper , and constraints for comparisons of std::pair , std::tuple , std::optional , and std::variant ( FTM ) * ( FTM ) * | P2944R3 | 14 | 19 (partial) * | |||
| Padded mdspan layouts ( FTM ) * | P2642R6 | |||||
| New CTAD for std::span and std::mdspan with integral constants | P3029R1 | 19 | ||||
| Atomic maximum and minimum ( FTM ) * | P0493R5 | |||||
| std::formatter<std::filesystem::path> ( FTM ) * | P2845R8 | |||||
| Printing Blank Lines with std::println() ( FTM ) * | P3142R0 | 14 * | 19 * | 19.41* * | ||
| Undeprecate std::polymorphic_allocator::destroy | P2875R4 | 15 | 19.41* | |||
| Removing deprecated strstreams | P2867R2 | 19 | ||||
| Removing deprecated std::shared_ptr Atomic Access APIs | P2869R4 | |||||
| Removing std::wstring_convert | P2872R3 | 19 | ||||
| DR23: Permit an efficient implementation of std::print ( FTM ) * |
P3107R5
P3235R3 |
19.43* | ||||
| Execution control library ( FTM ) * |
P2300R10
P3396R0 |
|||||
| std::inplace_vector : dynamically-resizable vector with fixed capacity ( FTM ) * | P0843R14 | |||||
| std::philox_engine : counter-based random number engine ( FTM ) * | P2075R6 | |||||
| std::optional range support ( FTM ) * | P3168R2 | |||||
| std::is_virtual_base_of : type trait for detecting virtual base classes ( FTM ) * | P2985R0 | 15 | 20 | |||
| std::dims for std::mdspan ( FTM ) * | P2389R2 | 19 | ||||
| DR11: Formal specification of the type of std::ignore | P2968R2 | 15 | 19 | 19.42* | ||
| DR20: Removing the common reference requirement from the indirectly invocable concepts ( FTM ) * | P2997R1 | 15 | 19 | 19.42* | ||
| Deprecating std::is_trivial and std::is_trivial_v | P3247R2 | 15 | 21 | |||
| DR20: Algorithm function objects | P3136R1 | Yes | 14 | 19.39* | 14.0.3* | |
| std::ranges::cache_latest_view ( FTM ) * | P3138R5 | 15 | ||||
| Constraining std::expected equality operators ( FTM ) * | P3379R0 | 15 | ||||
| std::aligned_accessor : an std::mdspan accessor expressing pointer over-alignment ( FTM ) * | P2897R7 | 21 | ||||
| std::is_sufficiently_aligned : checks a pointer’s alignment precondition ( FTM ) * | P2897R7 | 21 | ||||
| std::atomic_ref::address() ( FTM ) * | P2835R7 | |||||
| DR11/20: cv-qualified types in std::atomic and std::atomic_ref | P3323R1 | 19.44* | ||||
| constexpr std::atomic and std::atomic_ref ( FTM ) * | P3309R3 | |||||
| constexpr for specialized memory algorithms ( FTM ) * |
P3508R0
P3369R0 |
15 | ||||
| <stdbit.h> and <stdckdint.h> | P3370R1 | 15 | ||||
| <simd> : data-parallel types ( FTM ) * ( FTM ) * |
P1928R15
P3430R3 P3441R2 P3287R3 P2663R7 P2933R4 |
|||||
| A utility for creating execution environments | P3325R5 | |||||
| constexpr for exception types, e.g. std::bad_alloc , std::bad_cast etc. ( FTM ) * |
P3068R6
P3378R2 |
|||||
| Trivial relocatability traits and operations ( FTM ) * | P2786R13 | |||||
Defang and deprecate
std::memory_order::consume
|
P3475R1 | |||||
| Put std::monostate in <utility> | P0472R3 | 15 | 21 | 19.50* | ||
| std::indirect ( FTM ) * | P3019R14 | |||||
| std::polymorphic ( FTM ) * | P3019R14 | |||||
|
More
constexpr
for containers and container adaptors:
std::deque
,
std::flat_map
,
std::flat_multimap
,
std::flat_set
,
std::flat_multiset
,
std::forward_list
,
std::list
,
std::map
,
std::multimap
,
std::queue
,
std::priority_queue
,
std::set
,
std::multiset
,
std::stack
,
std::unordered_map
,
std::unordered_multimap
,
std::unordered_set
, and
std::unordered_multiset
|
P3372R3 | |||||
| constexpr std::inplace_vector for non-trivial types ( FTM ) * | P3074R7 | |||||
| std::ranges::to_input_view ( FTM ) * | P3137R3 | 15 | ||||
| std::ranges::approximately_sized_range and std::ranges::reserve_hint ( FTM ) * | P2846R6 | |||||
| <hive> : A bucket-based container that re-uses memory locations from erased elements ( FTM ) * | P0447R28 | |||||
| <contracts> : Contract-violation handling support ( FTM ) * | P2900R14 | |||||
| Standard library hardening ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * | P3471R4 | 15 (partial)* | 19.44* (partial)* | |||
|
Freestanding library:
<algorithm>
,
<numeric>
,
<random>
, (
<execution>
,
<memory>
)
( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * |
P2976R1 | |||||
| DR20: Converting contiguous iterators to pointers | P3349R0 | 15 | ||||
|
C++26 feature |
Paper(s) |
GCC libstdc++
|
Clang libc++
|
MSVC STL
|
Apple Clang*
|
*
- 将鼠标悬停在标有星号
*
的单元格上可查看附加弹窗注释。
DR
nn
- "DR" 后的数字
nn
表示缺陷报告所适用的目标 C++ 修订版本,例如 DR20 → C++20。
外部链接
| 1. | C++26 - 维基百科 |