【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 都是在它的基础上逐步进化。

相关推荐
爱凤的小光1 小时前
图漾GM461-E1相机专栏
c++
qwepoilkjasd2 小时前
C++智能指针介绍
c++
·白小白2 小时前
力扣(LeetCode) ——43.字符串相乘(C++)
c++·leetcode
咬_咬2 小时前
C++仿muduo库高并发服务器项目:Poller模块
服务器·开发语言·c++·epoll·muduo
FMRbpm3 小时前
链表5--------删除
数据结构·c++·算法·链表·新手入门
Kimser4 小时前
QT C++ QWebEngine与Web JS之间通信
javascript·c++·qt
QT 小鲜肉4 小时前
【QT/C++】Qt样式设置之CSS知识(系统性概括)
linux·开发语言·css·c++·笔记·qt
Elias不吃糖4 小时前
NebulaChat 框架学习笔记:深入理解 Reactor 与多线程同步机制
linux·c++·笔记·多线程
转基因4 小时前
命名空间与匿名空间
c++
煤球王子4 小时前
学而时习之:C++中的动态内存管理
c++