目录
C++ 自 2011 年起经历了多次重大更新,引入了众多现代化特性。以下是各版本的核心新特性概览(截至 C++23):
一、C++11(革命性更新)
-
自动类型推导
auto x = 42;// 自动推断类型decltype(x) y = x;// 获取表达式类型 -
范围 for 循环
std::vector<int> v = {1, 2, 3}; for (auto& num : v) { /* ... */ } // 遍历容器 -
Lambda 表达式
auto func = [](int a, int b) -> int { return a + b; }; -
右值引用与移动语义
T&&避免不必要的拷贝(如std::move) -
智能指针
cppstd::unique_ptr, std::shared_ptr, std::weak_ptr -
nullptr
替代 NULL,明确表示空指针
-
强类型枚举
enum class Color { Red, Green }; -
委托构造函数
一个构造函数调用同类其他构造函数
-
Initializer Lists
cppstd::vector<int> v = {1, 2, 3}; -
变长模板(Variadic Templates)
支持任意数量参数的模板(如
std::tuple)
二、C++14(增量改进)
-
泛型 Lambda
auto lambda = [](auto x, auto y) { return x + y; }; -
返回类型推导
cppauto func() { return 42; }// 自动推导返回值 -
二进制字面量
cppint bin = 0b1010; -
数字分隔符
cppint million = 1'000'000; -
**
std::make_unique**补充 C++11 的智能指针工具
三、C++17(实用增强)
-
结构化绑定
auto [x, y] = std::pair(1, 2.0); // x=1, y=2.0 -
**
if constexpr**编译时条件判断(模板元编程利器)
-
内联变量
inline constexpr int kMax = 100; -
折叠表达式
简化变长模板操作:
(args + ...) -
**
std::optional**安全处理可能缺失的值
-
并行算法
cppstd::sort(std::execution::par, vec.begin(), vec.end()); -
文件系统库
std::filesystem跨平台操作路径
四、C++20(重大革新)
-
概念(Concepts)
约束模板参数,提升错误信息可读性
template<typename T> requires std::integral<T> void foo(T x) {} -
协程(Coroutines)
简化异步编程(如生成器、异步任务)
-
模块(Modules)
替代头文件,加速编译:
import <iostream>; // 取代 #include -
范围库(Ranges)
链式操作容器:
auto result = vec | std::views::filter([](int x){return x%2==0;}) | std::views::transform([](int x){return x*x;}); -
三路比较运算符(<=>)
"太空船运算符" 自动生成比较逻辑
-
consteval 即时函数
编译时执行的函数:
consteval int sqr(int n) { return n*n; } -
**
std::format**类型安全的字符串格式化(类似 Python 的 f-string)
五、C++23(最新特性)
-
多维下标运算符
matrix[i, j]替代matrix[i][j] -
栈追踪库
std::stacktrace捕获异常位置 -
**标准属性
[[assume]]**提示编译器优化假设
-
**
std::print**内置打印函数:
std::print("Hello {}", name); -
动态内存分配器感知
容器可感知自定义分配器
-
**
if consteval**检测是否在编译时求值
六、关键优势总结
| 特性类别 | 代表特性 | 解决的问题 |
|---|---|---|
| 类型安全 | enum class, concepts |
避免隐式转换错误 |
| 性能优化 | 移动语义, 协程 | 减少拷贝开销 |
| 开发效率 | 自动类型推导, 范围 for | 简化代码编写 |
| 资源管理 | 智能指针, RAII | 防止内存泄漏 |
| 并发支持 | 并行算法, 协程 | 简化多线程编程 |
💡 学习建议:
优先掌握 C++11/14 基础(90% 项目在用)
逐步学习 C++17/20 现代特性(如智能指针、lambda、范围库)
关注 C++23 实用工具(如
std::print)
这些特性使 C++ 在保持高性能的同时,显著提升了安全性和开发效率。实际开发中推荐结合 Clang/GCC/MSVC 最新编译器使用。