要塞攻击免广告版
210.79MB · 2025-10-31
“C++11 才是真正现代意义上的 C++。”
这不是夸张。
C++11 是 C++ 语言的一次大转折,从语法到标准库,C++完成了蜕变。
C++11 到底都引入了哪些新特性?这些特性又是怎么改变我们写代码的方式的?
auto 类型推导著名的自动声明。
auto x = 10;       // int
auto y = 3.14;     // double
auto it = v.begin(); // 迭代器,不用手写冗长类型
让变量声明更简洁,甚至在使用方便上变得像python了。
forfor (auto& x : vec) {
    cout << x << endl;
}
告别手动迭代器,提高可读性。(最实用的更新之一)
C++11 引入了 右值引用(T&&) ,解决“拷贝昂贵”的问题,如下例子:
std::vector<int> foo() {
    std::vector<int> v(1000000, 42);
    return v; // C++11 可以直接移动,不再拷贝
}
配合 std::move,能显著优化性能。
C++11 提供了:
std::unique_ptr —— 独占所有权std::shared_ptr —— 共享所有权std::weak_ptr —— 弱引用这次!我们C++也终于有了 官方内置的安全内存管理,再也不必到处 new/delete了,实在是太过麻烦了~
nullptr不再用 NULL(其实是 0),而是专门的空指针字面量:
int* p = nullptr; 
constexpr让编译期能计算更多东西:
constexpr int square(int x) { return x * x; }
int arr[square(5)]; // 合法
提高了性能,又减少了开销。
匿名函数,简化回调与 STL 使用:
std::sort(v.begin(), v.end(),
          [](int a, int b) { return a > b; });
花括号 {} 可用于所有初始化:
int x{10};
std::vector<int> v{1, 2, 3, 4};
避免“窄化转换”的问题,更安全。
C++11 引入了标准多线程库:
#include <thread>
void work() { /* ... */ }
int main() {
    std::thread t(work);
    t.join();
}
这个学了操作系统就能理解有多实用了~
enum class强类型枚举,避免命名污染:
enum class Color { Red, Green, Blue };
Color c = Color::Red;
对于STL,也进行了一定程度的增强。
std::array:定长数组,替代 C 风格数组。std::unordered_map / unordered_set:基于哈希表的容器。std::tuple:多值返回。<regex> 。<random> :比 rand() 更强大更可控。<chrono> :更安全的时间处理。我们可以看看在11出来之前,C++前辈们都是怎么写代码的。
new/delete,到处是泄漏与悬挂指针;到了 C++11,有了以下这些好处。
auto、for、lambda;<thread>;constexpr。这使得 C++ 终于跟得上现代软件工程的需求,也让后续的 C++14/17/20/23 都是在它的基础上逐步进化。
 
                    