【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,有了以下这些好处。

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

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

相关推荐
青少儿编程课堂8 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:分层图最短路解析
c++·python·算法·bfs·信息学竞赛
FlightYe10 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
by2099912 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
Rover Ramble12 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
你怎么知道我是队长12 小时前
C++零基础入门第2周:数据类型、运算符与表达式完全指南(附20段可运行代码+避坑清单)
c++
say_fall13 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
雪落漂泊13 小时前
C++算法 滑动窗口篇(下)
开发语言·c++
孟健13 小时前
我把9个AI助理迁到了Grok Bot,连远程服务器都省了
人工智能·aigc·ai编程
threerocks14 小时前
震撼首发 | 格物 · 蜡笔状态图 Skill,一句话,做一部会动的状态图
aigc·openai·ai编程
西安小哥14 小时前
大模型 Agent 替我操作浏览器跑了一遍社区日常任务:一份踩坑与工程记录
ai编程