引言
C++11 标准是语言发展的重要里程碑,引入了大量革命性特性。本文系统梳理 C++11 的核心新增特性,涵盖统一列表初始化、声明优化(auto/decltype/nullptr)、STL 容器与接口扩展,以及右值引用、移动语义和完美转发等底层机制。
历史背景
C++ 首个国际标准发布于 1998 年(C++98)。C++11 在此基础上修复了诸多缺陷,并引入范围 for、智能指针等新特性。
统一的列表初始化
C++11 扩大了花括号 {} 的使用范围,适用于内置类型和用户自定义类型。使用列表初始化时,可添加等号 =,也可不添加。
int y = {2};
int y{2};
struct Point {
Point(int x, int y) : _x(x), _y(y) {}
int _x, _y;
};
Point p1 = {1, 1};
Point p1{1, 1};
const Point& r = {3, 3};
initializer_list
当 auto 用于初始化列表 {...} 时,编译器优先推导为 std::initializer_list<T> 类型。一般容器的构造函数和赋值操作符支持此类型。
vector<int> v1 = {1, 2, 3, 4, 3};
注意:initializer_list 仅引用常量区数组,不存储数据。多参数构造函数的隐式转换规则与此不同。
声明优化
C++11 新增了 auto, nullptr 和 decltype。
- nullptr:空指针常量,替代宏定义的
NULL,避免类型歧义。 - decltype:关键字用于推导表达式指定的类型,可作为模板实参或变量类型定义。
int a = 0;
double b = 1.0;
decltype(a * b) c = 2;


