【C++】C++11都有什么新特性?

时间:2025-09-06 14:00:03来源:互联网

下面小编就为大家分享一篇【C++】C++11都有什么新特性?,具有很好的参考价值,希望对大家有所帮助。

C++11都有什么新特性?

“C++11 才是真正现代意义上的 C++。”

这不是夸张。

C++11 是 C++ 语言的一次大转折,从语法到标准库,C++完成了蜕变。

C++11 到底都引入了哪些新特性?这些特性又是怎么改变我们写代码的方式的?


1. 语言核心新特性

(1)auto 类型推导

著名的自动声明。

auto x = 10;       // int
auto y = 3.14;     // double
auto it = v.begin(); // 迭代器,不用手写冗长类型

让变量声明更简洁,甚至在使用方便上变得像python了。


(2)范围 for

for (auto& x : vec) {
    cout << x << endl;
}

告别手动迭代器,提高可读性。(最实用的更新之一)


(3)右值引用与移动语义

C++11 引入了 右值引用(T&&) ,解决“拷贝昂贵”的问题,如下例子:

std::vector<int> foo() {
    std::vector<int> v(1000000, 42);
    return v; // C++11 可以直接移动,不再拷贝
}

配合 std::move,能显著优化性能。


(4)智能指针

C++11 提供了:

  • std::unique_ptr —— 独占所有权
  • std::shared_ptr —— 共享所有权
  • std::weak_ptr —— 弱引用

这次!我们C++也终于有了 官方内置的安全内存管理,再也不必到处 new/delete了,实在是太过麻烦了~


(5)nullptr

不再用 NULL(其实是 0),而是专门的空指针字面量:

int* p = nullptr; 

(6)constexpr

让编译期能计算更多东西:

constexpr int square(int x) { return x * x; }
int arr[square(5)]; // 合法

提高了性能,又减少了开销。


(7)Lambda 表达式

匿名函数,简化回调与 STL 使用:

std::sort(v.begin(), v.end(),
          [](int a, int b) { return a > b; });

(8)统一的初始化语法

花括号 {} 可用于所有初始化:

int x{10};
std::vector<int> v{1, 2, 3, 4};

避免“窄化转换”的问题,更安全。


(9)并发支持

C++11 引入了标准多线程库:

#include <thread>

void work() { /* ... */ }

int main() {
    std::thread t(work);
    t.join();
}

这个学了操作系统就能理解有多实用了~


(10)enum class

强类型枚举,避免命名污染:

enum class Color { Red, Green, Blue };
Color c = Color::Red;

2. 标准库的增强

对于STL,也进行了一定程度的增强。

  • std::array:定长数组,替代 C 风格数组。
  • std::unordered_map / unordered_set:基于哈希表的容器。
  • std::tuple:多值返回。
  • 正则表达式库 <regex>
  • 随机数库 <random> :比 rand() 更强大更可控。
  • chrono 时间库 <chrono> :更安全的时间处理。

3. 为什么说 C++11 是分水岭?

  • C++ 上一个标准是 C++98/03,整整 13 年几乎没有重大更新
  • C++11 被称作 “C++0x” (本来以为 200x 就能发布,结果一拖再拖),所以真正发布时大家非常期待。

我们可以看看在11出来之前,C++前辈们都是怎么写代码的。

  • 写 STL 要一堆迭代器模板,冗长又啰嗦;
  • 内存管理靠 new/delete,到处是泄漏与悬挂指针;
  • 没有原生线程库,跨平台编程极度痛苦;
  • 缺少现代语法糖(lambda、auto),模板代码难写又难读。

到了 C++11,有了以下这些好处。

  • 语法更简洁 : autofor、lambda;
  • 内存更安全 : 智能指针;
  • 性能更稳定 : 移动语义;
  • 并发更标准 : <thread>
  • 编译期计算能力更强 : constexpr

这使得 C++ 终于跟得上现代软件工程的需求,也让后续的 C++14/17/20/23 都是在它的基础上逐步进化。

本站部分内容转载自互联网,如果有网站内容侵犯了您的权益,可直接联系我们删除,感谢支持!