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


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

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

这不是夸张。

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

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


1. 语言核心新特性

(1)auto 类型推导

著名的自动声明。

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

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


(2)范围 for

c 复制代码
for (auto& x : vec) {
    cout << x << endl;
}

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


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

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

c 复制代码
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),而是专门的空指针字面量:

ini 复制代码
int* p = nullptr; 

(6)constexpr

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

c++ 复制代码
constexpr int square(int x) { return x * x; }
int arr[square(5)]; // 合法

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


(7)Lambda 表达式

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

c++ 复制代码
std::sort(v.begin(), v.end(),
          [](int a, int b) { return a > b; });

(8)统一的初始化语法

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

c++ 复制代码
int x{10};
std::vector<int> v{1, 2, 3, 4};

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


(9)并发支持

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

c++ 复制代码
#include <thread>

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

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

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


(10)enum class

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

css 复制代码
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 都是在它的基础上逐步进化。

相关推荐
counterxing4 小时前
Agent 跑起来之后,难的是复用、观测和评测
node.js·agent·ai编程
uccs4 小时前
大模型底层机制与Agent开发
agent·ai编程·claude
counterxing5 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
夜雪闻竹5 小时前
vectra 向量索引文件损坏怎么办
ai编程·向量·vectra
ZzT5 小时前
Harness 到底指什么
openai·ai编程·claude
宅小年6 小时前
AI 创业最危险的地方:太容易做出来
openai·ai编程·claude
麦客奥德彪6 小时前
Android Skills
架构·ai编程
于小猿Sup6 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
言萧凡_CookieBoty7 小时前
一文讲清 RAG:让 AI 读懂业务知识库的核心方法
ai编程
kyriewen7 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor