【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 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
小虎AI生活9 小时前
端云混合智能体落地拆解:英特尔×华硕把 WorkBuddy 优化进笔记本
aigc·ai编程
threerocks9 小时前
重磅开源!sweety-handdraw-video:目前市面最强手绘视频管线,ChatGPT 完美运行
aigc·openai·ai编程
柳杉9 小时前
借助 Codex 和可视化工作流,从调研到完整实现,3D 大屏竟然可以这么简单
前端·ai编程·数据可视化
孟健9 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
程序员老刘12 小时前
Flutter你看看人家RN
flutter·react native·ai编程
林壮Allen12 小时前
用 Go 从零实现多 Agent 协作框架:两个让我踩坑的设计问题
go·ai编程
god_cvz12 小时前
第三章:1、Tool Calling(工具调用)
后端·ai编程
jimy113 小时前
C++ 虚函数表:基类和派生类共用一张 vtable 吗?
开发语言·c++
爱吃提升13 小时前
Dev-C++ 5.11 C++断点调试完整教程
开发语言·c++