谈谈C++:C++11 及后续版本的新增与改变特性对比
·
谈谈C++:C++11 及后续版本的新增与改变特性对比
C++标准从C++11开始引入了许多现代特性,提升了语言的表达力、安全性和性能。以下表格按版本组织,分为语言特性和库特性两大类,列出主要新增或改变的内容。表格聚焦于关键特性,旨在提供全面而简洁的对比。每个版本的特性基于ISO标准,忽略次要缺陷修复(Defect Reports)。C++23是最新版本(2023发布),其特性仍在部分编译器中逐步支持。
| 版本 | 语言特性 (Core Language Features) | 库特性 (Standard Library Features) |
|---|---|---|
| C++11 | - 移动语义、右值引用、转发引用 - 可变模板、初始化列表、静态断言 - auto 类型推导、Lambda 表达式、decltype、using 类型别名- nullptr、强类型枚举、属性(如[[noreturn]])- constexpr 函数、委托构造函数、用户定义字面量- 显式虚函数覆盖、 final 指定符、默认/删除函数- 范围-based for 循环、非静态数据成员初始化 - 尾置返回类型、 noexcept 指定符- char16_t 和 char32_t、原始字符串字面量- 内联命名空间、右角括号简化 |
- 智能指针 (unique_ptr, shared_ptr, weak_ptr)- 多线程支持 ( thread, mutex, condition_variable)- chrono 时间库、元组 (tuple)- 数组容器 ( array)、无序容器 (unordered_map 等)- 类型特性 ( type_traits)- move、forward、to_string- 内存模型、 async、future- make_shared、ref、cref |
| C++14 | - 二进制字面量、泛型 Lambda - Lambda 捕获初始化、返回类型推导 - decltype(auto)、松弛 constexpr 约束- 变量模板、 [[deprecated]] 属性- 泛型关联容器改进 |
- 标准库用户定义字面量 - 编译时整数序列 ( integer_sequence)- make_unique- 异构查找在关联容器中支持 |
| C++17 | - 类模板参数推导、非类型模板参数用 auto- 折叠表达式、改进 auto 推导规则- constexpr Lambda、this 值捕获- 内联变量、嵌套命名空间 - 结构化绑定、初始化语句在 if/switch - constexpr if、UTF-8 字符字面量- 枚举直接列表初始化、 [[fallthrough]]、[[nodiscard]]、[[maybe_unused]] 属性- __has_include、类模板参数推导 (CTAD) |
- variant、optional、any- string_view、invoke、apply- 文件系统库 ( filesystem)- byte 类型、并行算法- sample、clamp、reduce- 前缀求和算法、GCD/LCM - not_fn、字符串数字转换- chrono 舍入函数- 关联容器拼接 |
| C++20 | - 协程 (co_await, co_yield, co_return)- 概念 (Concepts) 用于类型约束 - 三路比较 ( <=>) 和排序类别- 指定初始化、Lambda 模板语法 - 范围-based for 初始化、 [[likely]]、[[unlikely]] 属性- constexpr 虚函数、explicit(bool)- 立即函数 ( consteval)、using enum- Lambda 参数包捕获、 char8_t、constinit- __VA_OPT__ 宏改进 |
- 概念库 (e.g., same_as, convertible_to)- 格式化库 ( format, format_to)- osyncstream 同步输出- span 非拥有视图- 位操作 ( <bit>, popcount)- 数学常量 ( <numbers>)- is_constant_evaluated、bit_cast- 字符串 starts_with/ends_with、容器 contains- bind_front、统一擦除 (erase, erase_if)- Ranges 库 (视图如 views::filter, 算法如 ranges::sort)- midpoint、to_array- 三路比较辅助 |
| C++23 | - if consteval 检查编译时评估- 推导 this (显式对象成员函数)- auto(x) 和 auto{x} 显式拷贝- 多维下标操作符 ( operator[] 多参数)- Lambda 属性、括号可选、 static 操作符- [[assume]] 属性优化假设- 循环初始化中类型别名 ( using)- 静态 constexpr 变量在 constexpr 函数- 范围-based for 临时对象生命周期延长 - 新预处理器: #elifdef、#elifndef、#warning- size_t 字面后缀 (uz, z 等)- 从继承构造函数的 CTAD - 简化隐式移动规则 - 常量表达式中非字面变量/标签/goto |
- stacktrace 库捕获栈迹- expected 用于错误处理- mdspan 多维数组视图- 平坦容器 ( flat_map, flat_set)- print、println 格式化输出- optional 和 expected 单子操作 (and_then, transform)- Ranges 改进: views::zip, chunk, slide, stride, cartesian_product, enumerate, repeat, join_with- generator 协程生成器- move_only_function 非拷贝函数对象- byteswap、to_underlying、starts_with/ends_with 扩展- out_ptr、inout_ptr 指针输出- unreachable、forward_like- allocate_at_least 分配器大小反馈- from_chars/to_chars 常量表达式版本- 标准库模块支持 - bitset、unique_ptr 常量表达式改进 |
更多推荐
所有评论(0)