现代 C++
2026/1/31大约 2 分钟
现代 C++
探索 C++11/14/17/20/23 的新特性,编写更安全、更高效的现代 C++ 代码。
现代 C++ 核心
- 类型推导:
auto、decltype - 智能指针:
unique_ptr、shared_ptr、weak_ptr - 移动语义:右值引用、完美转发
- Lambda:匿名函数与函数式编程
学习内容
现代 C++ 入门
C++11/14/17/20 核心特性总览:auto、Lambda、智能指针、移动语义
C++ 版本时间线
现代 C++ 代码风格对比
传统风格
// 传统 C++98 风格
std::vector<int>* vec = new std::vector<int>();
vec->push_back(1);
vec->push_back(2);
for (std::vector<int>::iterator it = vec->begin();
it != vec->end(); ++it) {
std::cout << *it << " ";
}
delete vec;现代风格
// 现代 C++11+ 风格
auto vec = std::make_unique<std::vector<int>>();
vec->push_back(1);
vec->push_back(2);
for (const auto& x : *vec) {
std::cout << x << " ";
}
// 无需手动 delete关键特性速查
| 特性 | 版本 | 说明 |
|---|---|---|
auto | C++11 | 类型推导 |
nullptr | C++11 | 空指针常量 |
Lambda | C++11 | 匿名函数 |
decltype | C++11 | 类型推导 |
unique_ptr | C++11 | 独占所有权智能指针 |
std::move | C++11 | 移动语义 |
constexpr | C++11 | 编译期常量 |
struct T { auto x = 0; } | C++14 | 成员默认初始化 |
if constexpr | C++17 | 编译期条件 |
auto [x, y] = pair | C++17 | 结构化绑定 |
std::filesystem | C++17 | 文件系统库 |
Concepts | C++20 | 模板约束 |
std::ranges | C++20 | 范围库 |
co_await | C++20 | 协程 |
std::print | C++23 | 类型安全打印 |
学习建议
循序渐进
- C++11 基础:auto、Lambda、智能指针
- 移动语义:理解右值引用和 std::move
- C++14/17:泛型 Lambda、结构化绑定
- C++20:Concepts、Ranges
- 最佳实践:现代 C++ 风格指南
优先掌握
- auto:简化类型声明
- 范围 for:更安全的遍历
- 智能指针:自动内存管理
- Lambda:函数式编程
- std::make_unique:创建智能指针
资源推荐
- 书籍:《Effective Modern C++》
- 在线:cppreference.com
- 视频:C++ Weekly
- 标准:C++ Standard Draft