谈谈C++:C++11 及后续版本的新增与改变特性对比

C++标准从C++11开始引入了许多现代特性,提升了语言的表达力、安全性和性能。以下表格按版本组织,分为语言特性和库特性两大类,列出主要新增或改变的内容。表格聚焦于关键特性,旨在提供全面而简洁的对比。每个版本的特性基于ISO标准,忽略次要缺陷修复(Defect Reports)。C++23是最新版本(2023发布),其特性仍在部分编译器中逐步支持。

版本 语言特性 (Core Language Features) 库特性 (Standard Library Features)
C++11 - 移动语义、右值引用、转发引用
- 可变模板、初始化列表、静态断言
- auto 类型推导、Lambda 表达式、decltypeusing 类型别名
- nullptr、强类型枚举、属性(如[[noreturn]]
- constexpr 函数、委托构造函数、用户定义字面量
- 显式虚函数覆盖、final 指定符、默认/删除函数
- 范围-based for 循环、非静态数据成员初始化
- 尾置返回类型、noexcept 指定符
- char16_tchar32_t、原始字符串字面量
- 内联命名空间、右角括号简化
- 智能指针 (unique_ptr, shared_ptr, weak_ptr)
- 多线程支持 (thread, mutex, condition_variable)
- chrono 时间库、元组 (tuple)
- 数组容器 (array)、无序容器 (unordered_map 等)
- 类型特性 (type_traits)
- moveforwardto_string
- 内存模型、asyncfuture
- make_sharedrefcref
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)
- variantoptionalany
- string_viewinvokeapply
- 文件系统库 (filesystem)
- byte 类型、并行算法
- sampleclampreduce
- 前缀求和算法、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_tconstinit
- __VA_OPT__ 宏改进
- 概念库 (e.g., same_as, convertible_to)
- 格式化库 (format, format_to)
- osyncstream 同步输出
- span 非拥有视图
- 位操作 (<bit>, popcount)
- 数学常量 (<numbers>)
- is_constant_evaluatedbit_cast
- 字符串 starts_with/ends_with、容器 contains
- bind_front、统一擦除 (erase, erase_if)
- Ranges 库 (视图如 views::filter, 算法如 ranges::sort)
- midpointto_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)
- printprintln 格式化输出
- optionalexpected 单子操作 (and_then, transform)
- Ranges 改进:views::zip, chunk, slide, stride, cartesian_product, enumerate, repeat, join_with
- generator 协程生成器
- move_only_function 非拷贝函数对象
- byteswapto_underlyingstarts_with/ends_with 扩展
- out_ptrinout_ptr 指针输出
- unreachableforward_like
- allocate_at_least 分配器大小反馈
- from_chars/to_chars 常量表达式版本
- 标准库模块支持
- bitsetunique_ptr 常量表达式改进
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐