🎁 一句话总结
新手首选 C++17;做高性能开发再上 C++20。
🧩 0. 为什么 C++ 有多个版本?
C++ 的目标是:
- 极致性能(媲美 C)
- 更安全的内存管理
- 更强表达能力(泛型/类/模板)
- 更适合大型工程
C++98/03 存在大量痛点:
- 内存泄漏风险大
- 没有标准线程库
- 模板报错难读
- 语法过于复杂
- 标准库太少(文件系统、并发等)
所以现代 C++(从 C++11 开始)不断演化改善这些问题。
🟦 1. C++11 —— 现代 C++ 的“重生”(必须掌握)
C++11 是现代 C++ 的基础,包含大量革命性更新。
⭐ 1.1 auto 类型推导(解决类型过长问题)
旧时代:
std::vector<int>::iterator it;
现代:
auto it = vec.begin();
⭐ 1.2 lambda 表达式(更像 JS 的回调函数)
auto add = [](int a, int b){ return a + b; };
⭐ 1.3 智能指针(解决内存泄漏问题)
auto p = std::make_unique<int>(10);
⭐ 1.4 标准线程库(终于有了跨平台线程)
std::thread t([]{ std::cout << "hi"; });
t.join();
⭐ 1.5 移动语义(性能巨大提升)
std::string b = std::move(a);
🟩 2. C++14 —— C++11 的增强版(简单易学)
⭐ 2.1 auto lambda 参数
auto f = [](auto a, auto b){ return a + b; };
⭐ 2.2 make_unique
auto p = std::make_unique<int>(5);
⭐ 2.3 更强 constexpr
🟨 3. C++17 —— 工程界最常用(新手最推荐)
⭐ 3.1 std::optional
std::optional<int> id;
⭐ 3.2 std::variant
std::variant<int, std::string> v = 1;
v = "hello";
⭐ 3.3 std::string_view
std::string_view sv = str;
⭐ 3.4 结构化绑定
auto [x, y] = point;
⭐ 3.5 if constexpr
if constexpr (std::is_integral_v<T>) {}
⭐ 3.6 std::filesystem
for (auto& p : std::filesystem::directory_iterator(".")) {}
🟧 4. C++20 —— 下一代主流
⭐ 4.1 Concepts
template <Sortable T>
void sort(T&);
⭐ 4.2 Ranges
auto r = vec
| std::views::filter(...)
| std::views::transform(...);
⭐ 4.3 协程 Coroutines
co_await asyncTask();
⭐ 4.4 Modules
🟥 5. C++23 —— 完善版
⭐ 5.1 std::expected
std::expected<int, Error> result;
⭐ 5.2 std::print()
std::print("Hello {}\n", "world");
🧭 6. 如何选择 C++ 版本?
| 场景 | 推荐版本 |
|---|---|
| 新手学习 | C++17 |
| AI/游戏/音视频 | C++20 |
| 旧项目 | C++14 / C++17 |
| 企业跨平台 | C++17 |
🔧 7. 编译器选择
| 系统 | 编译器 |
|---|---|
| Windows | MSVC(VS2022) |
| Linux | g++ 12+ |
| macOS | Clang |
| 跨平台 | Clang 14+ |
🎓 8. 新手学习顺序(C++17)
- 基础语法
- 类与对象
- 智能指针(RAII)
- STL 容器
- lambda
- 多线程
- C++17 特性(optional/variant/string_view/filesystem)
- 进阶 C++20(协程/Ranges/Concepts)