C++26
来自 zh.cppreference.net
< cpp
C++ 标准的下一代。
当前 C++26 的 IS 时间表: 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 | ||||||||
| 包索引 (FTM)* | P2662R3 | 15 | 19 | ||||||||
| 移除枚举弃用的算术转换 | P2864R2 | 14 | 18 | ||||||||
| DR11/20: 模板参数初始化 | P2308R1 | 9 | 18 | ||||||||
| 禁止将返回的引用绑定到 临时对象 | P2748R5 | 14 | 19 | ||||||||
| 对 结构化绑定 的属性 (FTM) | * | P0609R3 | 15 | ||||||||
未初始化读取 的错误行为,[[indeterminate]] 属性
|
P2795R5 P3684R1 |
16 | |||||||||
= delete("reason"); (FTM)*
|
P2573R2 | 15 | 19 | ||||||||
| 可变参数 友元 (FTM)* | P2893R3 | 15 | 20 | ||||||||
| DR98: 澄清聚合初始化中花括号省略的规则聚合初始化 | P3106R1 | 是 | 17 | ||||||||
| DR20: 禁止模块声明成为宏 | P3034R1 | 15 | |||||||||
| DR11: 平凡无限循环不是未定义行为 | P2809R3 | 14 | 19 | ||||||||
| constexpr placement new (FTM)* | P2747R2 | 15 | 20 | ||||||||
| 结构化绑定声明作为条件 (FTM)* | P0963R3 | 15 | 6 (部分)* 21 |
||||||||
| 涉及 约束 和 折叠表达式 的排序 (FTM) | * | P2963R3 | |||||||||
| 19 删除 | 指向不完整类型的指针应为非良构 | P3144R2 | 15 | 19 | |||||||
| 6.7 结构化绑定可以引入 包 (FTM) | * | P1061R10 | 16 | ||||||||
| 21 constexpr 结构化绑定 | 以及对 constexpr 变量的引用 | P2686R516 | *22 (部分) | * | |||||||
| 6.7 constexpr 异常 (FTM) | * | P3068R6 | |||||||||
| 16 | 牛津可变参数逗号 | P3176R1 | 15 | ||||||||
| 20 | 移除弃用的数组比较 | P2865R6 | 15 | ||||||||
#embed 20
(FTM)
|
* | P1967R14 | 15 19 | ||||||||
| * 概念和变量模板的模板参数 (FTM) | * | P2841R722 (部分) | |||||||||
| * 平凡联合体 (FTM) | * P3074R7 |
||||||||||
| P3726R2 | 可观察检查点 | P1494R5 | |||||||||
| 16 契约 (FTM) | * | P2900R14 | |||||||||
| 16 反射 (FTM) | * P2996R13 P3096R12 P3293R3 P3394R4 |
P3795R216 | |||||||||
| * 展开语句 (FTM) | * | P1306R5 | |||||||||
| 16 constexpr 虚继承 (FTM) | * | P3533R2 | |||||||||
| 16 | 诊断预处理器错误 | P2843R3 | |||||||||
| 16 | 允许将 main 附加到全局模块 | P3618R0 | |||||||||
16
#lineDR20: 允许在模块声明前使用 |
export | ||||||||||
| P3868R1 | DR17: 类型模板模板参数的类模板实参推导 | ||||||||||
| P3865R3 | 契约断言中拼接表达式的常量化 | ||||||||||
| P3598R0 |
C++26 特性 |
提案
|
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
C++26库特性
| C++26特性 |
提案 |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
|
|---|---|---|---|---|---|---|
| 对<charconv>函数成功或失败的测试 (FTM)* | P2497R0 | 14 | 18 | 16.0.0* | ||
| std::text_encoding:文本编码标识 (FTM)* | P1885R12 P2862R1 |
14 | ||||
| std::to_string和std::to_wstring的算术重载使用std::format (FTM)* | P2587R3 | 14 | ||||
| 格式参数的类型检查 (FTM)* | P2757R3 | 15 | ||||
| 指针格式化 (FTM)* | P2510R3 | 14* | 17* | 19.40** | ||
| 对std::chrono值类的哈希支持 ( FTM)*P2592R3 | 16 | |||||
| <rcu>:读-复制更新 ( FTM)*P2545R4 | ||||||
| <hazard_pointer>:风险指针 ( FTM)*P2530R3 | ADL安全的 | |||||
| std::projectedP2538R1 | 14 | *18 | *19.38* | *16.0.0* | 常量表达式稳定排序 | |
| ( FTM)*P2562R1 | 15 | 21 | ||||
| 成员std::basic_format_arg::visit() (FTM)* | P2637R3 | 15 | 19 | |||
| 成员std::variant::visit() (FTM)* | P2637R3 | 15 | 18 | |||
| std::is_within_lifetime (FTM)* | P2641R4 P3450R1 |
22 (部分)* | ||||
| 用剩余异构重载扩展关联容器 (FTM)* | P2363R5 | 16 | ||||
| 允许将std::weak_ptr用作无序关联容器的键 (FTM)* | P1901R2 | 16 | ||||
| 文件流中的原生句柄 (FTM)* | P1759R6 | 14 | 18 | 16.0.0* | ||
| 字符串流与std::string_view 的接口 (FTM) | * | P2495R3 | 16 | |||
| 19 std::bitset与 std::string_view的接口 (FTM | ) | * | P2697R1 | 16 | ||
18
constexpr16.0.0*<为>cmath<和> complex添加更多 (FTM ) (FTM)**
|
P1383R2 | 4.6 (部分)* | ||||
| 在比值上添加新的2022年SI词头:std::quecto、std::ronto、std::ronna和std::quetta (FTM)* | P2734R0 | 14 | 17* | |||
| std::function_ref:类型擦除可调用引用 (FTM)* | P0792R14 P3961R1 |
16 | ||||
| std::copyable_function (FTM)* | P2548R6 | 16 | ||||
| std::bind_front、std::bind_back和std::not_fn到NTTP可调用对象 (FTM)* (FTM)* (FTM)* |
P2714R1 | 16 | ||||
| std::submdspan() (FTM)* | P2630R4 P3355R1 P3663R3 P3982R2 |
16 | ||||
| 独立语言:可选::operator new | P2013R5 | 19.38* | ||||
| 独立std::char_traits、std::errc以及以下工具:<charconv>、<cstdlib>、<cstring>、<cwchar> (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2338R4 | 19.38* | ||||
| 更多独立工具 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* |
P2198R7 | 19.38* | ||||
| 饱和运算 (FTM)* | P0543R3 P4052R0 |
14 16* |
18 | 16.0.0* | ||
| <调试>:调试支持 ( FTM)*P2546R5 | P2810R4 16 |
*linalg | ||||
| <:基于BLAS的自由函数线性代数接口> ( FTM)*P1673R13 | P3050R2 P3222R0 P3371R5 使 |
|||||
| assert()宏更易用P2264R7 | 是 | *动态格式字符串 | ||||
| ( FTM)*P2918R2 | P3953R3 14 |
*16 *18 |
16.0.0* | std::span::at() | ||
| ( FTM)*P2821R5 | 14 | 18 | 16.0.0* | 为 | ||
| std::complex添加元组协议 (FTM)* | P2819R2 | 15 | 19 | |||
| std::generate_canonical | 的新规范P0952R2 | 16 | 19.42* | |||
| 移除已弃用的类型定义std::allocator::is_always_equal | P2868R3 | 15 | 18 | 16.0.0* | ||
| 移除不带参数的std::basic_string::reserve()函数重载 | P2870R3 | 18 | 16.0.0* | |||
| 移除已弃用的Unicode转换facets (<codecvt>) | P2871R3 | 18 | 16.0.0* | |||
| 独立:移除std::strtok (FTM)* | P2937R0 | 14 | 19.40* | |||
| 独立库:部分类 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2407R5 | 14 | 19.42* | |||
| 独立库:std::inout、std::expected、std::span (FTM)* (FTM)* (FTM)* (FTM)* |
P2833R2 | 14 | 19.42* | |||
| DR23: std::basic_const_iterator应遵循其底层类型的可转换性 (FTM)* | P2836R1 P2950R0 |
14 | 19.40* | |||
| DR20: std::make_format_args现在只接受左值引用而非转发引用 | P2905R2 | 14 | 18 | 19.40* | 16.0.0* | |
| DR20: 修复将代码单元格式化为整数的问题 (FTM)* | P2909R4 | 13.3 | 18 | 19.40* | 16.0.0* | |
| views::concat (FTM)* | P2542R8 | 15 | ||||
| 字符串和字符串视图 的拼接 (FTM) | * | P2591R5 | 15 | |||
| 19 为 算法启用列表初始化 (FTM | ) * P2248R8 |
P3217R0 | ||||
| P3787R2 15 std::ranges::generate_random (FTM | ) | |||||
| *P1068R11对std::reference_wrapper的比较,以及对std::pair、std::tuple、std::optional和 std::variant比较的约束 (FTM )* (FTM | ) | * | P2944R3 14 22 |
|||
| 19 (部分) *填充的mdspan布局 (FTM | ) | * | ||||
| P2642R616 带有整型常量的std::span和 | std::mdspan | 的新CTAD | P3029R1 | |||
| 16 19 原子最大值和最小值 (FTM | ) | * | ||||
| P0493R5<16 > std::formatterstd::filesystem::path ( | FTM | ) | ||||
| *P2845R8 16 使用std::println()打印空行 | ( | FTM) | *P3142R0 | 14* | ||
| 19* | 19.41* | *取消弃用 | std::polymorphic_allocator::destroy | P2875R4 | ||
| 14.3 | * | 15 | ||||
| 19.41*移除弃用的strstreamsP2867R2 | 19 | |||||
| 移除弃用的std::shared_ptr | 原子访问API | P2869R4 | ||||
| 移除std::wstring_convert P2872R319 DR23: 允许高效的std::print | 实现 ( |
FTM | ) | |||
| *P3107R5 P3235R316 19.43*常量表达式 | placement new | ( | FTM | |||
| ) *P2747R215 20 | 执行控制库 ( FTM ) * P2300R10 P3388R3 P3396R1 |
|||||
| P3433R1P3481R5P3570R2 | P3682R0 P3887R1 附加 执行控制库 修复 |
|||||
| P3373R4P3826R5 P3986R1P4154R0P4159R0std::inplace_vector | :动态可调整大小但容量固定的向量 ( FTM |
) | ||||
| *P0843R14 P3981R2P4022R016 std::philox_engine | :基于计数器的随机数引擎 | ( | ||||
| FTM) *P2075R616 std::optional | 范围支持 ( |
FTM | ) | |||
| *P3168R2 P3913R116 22 (部分)*std::is_virtual_base_of | :检测虚基类的类型特性 | ( | FTM | |||
| )*P2985R0 15 20 std::dims | 用于 | std::mdspan | ( | |||
| FTM) | * | P2389R2 | 16 | 19 | ||
| DR11: std::ignore类型的正式规范P2968R215 | 19 | 19.42* | DR20: 从间接可调用概念中移除公共引用要求 | ( | ||
| FTM)*P2997R1 | 15 | 19 | 19.42* | |||
| 弃用 | std::is_trivial | 和 | std::is_trivial_v | P3247R2 | 15 | |
| 21 DR20: 算法函数对象P3136R1是是 | 19.39* | 是 | ||||
| std::ranges::cache_latest_view ( FTM )*P3138R515 | 约束 | std::expected | 相等运算符 | |||
| (FTM)* P3379R015 22 std::aligned_accessor | :一种表达指针过对齐的 | std::mdspan | ||||
| 访问器 ( FTM)*P2897R7 | 16 | std::is_sufficiently_aligned | ||||
| :检查指针的对齐前置条件 (FTM)* | P2897R7 16 |
std::atomic_ref::address() | ( | |||
| FTM)*P2835R7 | P3936R1 | 16 (部分)* | 22 (部分)* | |||
| DR11/20: cv限定类型在std::atomic和std::atomic_ref 中P3323R116 19.44* | 常量表达式 | |||||
| std::atomic和 std::atomic_ref (FTM) | * P3309R3 |
常量表达式 | ||||
| <专用内存算法> (<FTM> )*P3508R0P3369R0 15 stdbit.h和stdckdint.h | ( | FTM) * |
||||
| < (>FTM) *P3370R115* | 16
simd :数据并行类型 ( FTM ) * P1928R15 |
P3430R3P2876R3 | ||||
| P3691R1 | P3922R1 P3690R1 |
|||||
| P3932R0P4012R1 | 16 (部分) | |||||
| *SIMD数学运算P1928R15P3844R4创建 执行环境的工具P3325R5常量表达式异常类型,例如 | std::bad_alloc 、 std::bad_cast |
等 | ||||
| ( | FTM | ) | ||||
| * P3068R6P3378R2P3842R216 | std::simd::chunk | |||||
| P3441R216 SIMD位运算 ( FTM)*P2933R4 | 交错 | |||||
std::complexstd::memory_order::consume
|
值在 | |||||
| std::simd中的支持 (<FTM> | ) | * | P2663R7 | 解除能力并弃用 | ||
| P3475R1 将std::monostate放入utility | P0472R3 | 15 | ||||
| 21 19.50*std::indirect (FTM | ) | * | ||||
| P3019R14 16 std::polymorphic (FTM )*P3019R1416 更多常量表达式容器和适配器 (FTM) * (FTM) * (FTM) * (FTM) * (FTM) * (FTM) * (FTM) * (FTM) * (FTM) |
* | P3372R316 (部分) | * 21 (部分)* |
|||
| 22 (部分)*非平凡类型的常量表达式std::inplace_vector (FTM)* | P3074R7 | |||||
| std::ranges::as_input_view (FTM)* | P3137R3 P3828R1 |
15* 16* |
||||
| std::ranges::approximately_sized_range和std::ranges::reserve_hint (FTM)* | P2846R6 | |||||
| <hive>:一种基于桶的容器,复用已擦除元素的内存位置 (FTM)* | P0447R28 | |||||
| 对可观察检查点的库支持 (FTM)* | P1494R5 P3641R0 |
16 | ||||
| <契约>:违约处理支持 (FTM)* | P2900R14 P3819R0 |
16 | ||||
| 标准库强化 | P3471R4 P3697R1 P3878R1 |
15 (部分)* | 19.44* (部分)* 19.50* (部分)* | |||
| 独立库:<algorithm>、<execution>、<memory>、<numeric> 和<random> (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* |
P2976R1 | |||||
| DR20: 将连续迭代器转换为指针 | P3349R0 | 15 | 19.51* | |||
| <meta>:反射库支持 (FTM)* | P2996R13 P3394R4 P3293R3 P3096R12 P3795R2 P4156R0 |
16 (部分)* | ||||
| 常量表达式异常作为反射中的错误处理 (FTM)* | P3560R2 | 16 | ||||
| std::define_static_object、std::define_static_array、std::define_static_string (FTM)* | P3491R3 | 16 | ||||
| std::simd::basic_vec和std::simd::basic_mask是范围类型 | P3480R6 | 16 | ||||
| std::optional<T&> (FTM)* (FTM)* | P2988R12 P3836R2 |
16 | 22 | |||
| std::string::subview()和std::string_view::subview() (FTM)* | P3044R2 | 16 | 22 | |||
| 常量表达式std::shared_ptr及其友元 (FTM)* | P3037R6 | |||||
| 协程任务类型 (FTM)* | P3552R3 P3980R1 P3927R2 P3941R4 P4151R1 |
|||||
| 异步作用域:为非顺序并发创建作用域 (FTM)* | P3149R11 P3815R1 |
|||||
| 并行调度器 (FTM)* | P2079R10 P3804R2 |
|||||
| 使用常量表达式异常的高质量sender诊断 | P3557R3 | |||||
| execution::write_env和execution::unstoppable sender适配器 | P3284R4 | |||||
| std::views::indices (FTM)* | P3060R3 | 16 | ||||
| 并行范围算法 (FTM)* | P3179R9 P3709R2 |
|||||
| 原子浮点最小/最大 (FTM)* | P3008R6 | |||||
| 原子归约操作 (FTM)* | P3111R8 | |||||
| SIMD置换操作 (FTM)* | P2664R11 | |||||
| std::mdspan::at() | P3383R3 | 16 | ||||
| std::exception_ptr_cast() (FTM)* | P2927R3 P3748R0 P3981R2 |
16 (部分)* | ||||
| 标准化常量表达式类型排序 (FTM)* | P2830R10 P3778R0 P4140R0 |
16 | ||||
| std::constant_wrapper (FTM)* | P2781R9 P3978R3 |
16 | 23 | |||
| std::apply变更:std::apply_result、std::is_applicable和std::is_nothrow_applicable (FTM)* | P1317R2 | |||||
| 使std::promise和std::packaged_task中的类型擦除分配器使用一致 | P3503R3 | 17 | 19.51* | |||
| std::filesystem::path::display_string()和std::filesystem::path::native_encoded_string() (FTM)* | P2319R5 | |||||
| 使std::istream::ignore()不那么令人惊讶 | P3223R2 | 16 | 19.50* | |||
| DR11: 解决std::valarray和std::initializer_list 中begin/end的不一致 (FTM) * (FTM) | * | P3016R6 | ||||
| 19.51*std::flat_meow 修复 (FTM) * (FTM) | * | P3567R2 | 22 | |||
| 19.51*使std::integer_sequence 可用于结构化绑定和展开语句 (FTM) | * | P1789R3 | 16 | |||
| 22 常量表达式文本格式化 (FTM) | * | |||||
| P3391R2 std::start_lifetime (FTM) | * | |||||
| P3726R2std::is_structural:检测结构类型的类型特性 (FTM)* | P3856R8 | 16 | ||||
| std::constant_wrapper用作std::function_ref构造函数参数 | P3948R1 | 16 | ||||
在随机数生成中支持signed char和unsigned char |
P4037R1 | |||||
| 使用特性宏检测契约违约处理器的实现定义可替换性 ( FTM)*P3886R0 |
16 | DR20: 使视图迭代器/哨兵的用户定义构造函数私有 | ||||
| P3059R2 | 是 | DR20: 过滤视图扩展以更安全使用 | ||||
| ( FTM)*P3725R3 | 16 | C++26特性 | ||||
| 提案 |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
* |
- 将鼠标悬停在带星号 * 的单元格上可查看更多弹出注释。
DR
nn - "DR"后的数字 nn 表示缺陷报告所应用的目标C++修订版,例如DR20 C++20。
→
外部链接
| 1. | C++26 - 维基百科 |