Skip to content

C++20

C++20(ISO/IEC 14882:2020)是继 C++11 之后最具影响力的版本,引入了四大"基石级"特性:ConceptsRangesCoroutinesModules

四大基石

Concepts(概念)

对模板参数施加命名约束,替代 SFINAE 和 static_assert

cpp
template<typename T>
concept Sortable = requires(T a, T b) {
    { a < b } -> std::convertible_to<bool>;
};

void sort(Sortable auto& container);

Ranges(范围库)

基于惰性求值的管道式数据处理:

cpp
auto result = numbers
    | views::filter([](int n) { return n > 0; })
    | views::transform([](int n) { return n * n; })
    | views::take(10);

Coroutines(协程)

无栈协程的底层支持(co_awaitco_yieldco_return),为异步编程和生成器模式提供语言级支持。标准库中的高级封装(std::generator)留给了 C++23。

Modules(模块)

替代 #include 的模块化编译系统,解决头文件的编译效率和宏污染问题。

其他重要特性

特性说明
<=> 三路比较运算符自动生成比较运算符
consteval / constinit更精确的编译期语义
std::format类型安全的格式化库(Python 风格)
std::span连续内存的非拥有序列视图
std::jthread自动 join 的线程
std::latch / std::barrier / std::counting_semaphore同步原语
std::source_location替代 __FILE__/__LINE__
std::ranges 算法范围化的查找、排序、变换
std::erase / std::erase_if统一容器擦除
日历与时间区chrono 库的重大扩展

编译器支持

编译器支持状态
GCC10+(核心特性),12+ 较完整
Clang15+(Modules 仍实验性)
MSVCVS 2022 (17.0)+

延伸阅读

基于 MIT 许可发布