C++20
C++ 标准的下一轮主要修订
以下特性即将被合入 C++20 中:
- 从 协程, 模块, 约束与概念, abbreviated function templates 技术规范中,
- 从 范围, 统一容器擦除 (std::erase/std::erase_if) 技术规范中
新的语言特性
- 功能特性测试
- 三路比较 运算符 <=> 和 operator==() = default
- 指派初始化器
- 基于范围的 for 循环 中的初始化语句和初始化器
- char8_t
-
[[no_unique_address]]
-
[[likely]]
-
[[unlikely]]
- lambda 捕获 中的包展开
- 取消了在多种上下文语境中,使用
typename
关键字以消除类型歧义的要求 - consteval, constinit
- 更宽松的 constexpr 要求
- signed integers are 2's complement
- 使用圆括号的聚合初始化
- array new 可推导数组长度
- 协程
- 模块
- 概念
- abbreviated function templates
新的库特性
新的头文件
- <concepts>
- <coroutine>
- <compare>
- <version>
- <source_location>
- <format>
- <span>
- <ranges>
- <bit>
- <numbers>
- <syncstream>
线程支持库中:
库特性
- 格式化库
- 日历 和 时区 库
- std::source_location
- std::span
- std::endian
- 针对数组的 make_shared 支持
- std::remove_cvref
- std::to_address
- 浮点类型和 shared_ptr 的原子对象
- std::barrier, std::latch 和信号量
- std::jthread 和线程停止类
-
<version>
- std::osyncstream
- std::u8string 和其他 char8_t 的使用
- <algorithm>, <utility>, <complex> 头文件中设施的 constexpr 化
- std::string(_view)::starts_with 和 ends_with
- assume_aligned
- bind_front
- c8rtomb/mbrtoc8
- make_obj_using_allocator 等
- make_shared_default_init/make_unique_default_init
- unordered_map 等容器中的各种查找方法
- std::polymoprhic_allocator<> 的全特化
- std::execution::unseq
- std::midpoint 和 std::lerp
- std::ssize. std::is_bounded_array
- Ranges, 统一容器擦除 (std::erase/std::erase_if)
- 数学常数