C++11 核心特性详解
一、C++11 的发展历史
C++11 是 C++ 标准演进中最重要的里程碑之一,它标准化了既有实践并引入了大量新特性。在 2011 年 8 月正式采纳前,该项目曾被称为'C++0x'。从 C++98 到 C++11 经历了约 8 年的间隔,此后 C++ 更新周期逐渐稳定为每 3 年左右一次。

二、列表初始化
1. C++98 传统的 { }
在旧标准中,{} 主要用于数组和结构体的聚合初始化。
struct Point { int _x; int _y; };
int main() {
// 先分配空间再拷贝
int array1[] = { 1, 2, 3, 4, 5 };
int array2[5] = { 0 };
Point p = { 1, 2 };
return 0;
}
2. C++11 中的 {} 统一初始化
C++11 试图通过 {} 实现统一初始化(List Initialization)。无论是内置类型还是自定义对象,都可以使用这种方式,且可以省略 = 号。
核心机制:
- 对于自定义类型,本质是通过构造函数进行隐式转换。
- 编译器优化后,往往能直接构造目标对象,避免临时对象的拷贝开销。
- 在容器
push_back等场景中,{}初始化通常比显式构造更简洁高效。
#include<iostream>
#include<vector>
using namespace std;
struct { _x; _y; };
{
:
( year = , month = , day = )
:_year(year), _month(month), _day(day) {
cout << << endl;
}
( Date& d)
:_year(d._year), _month(d._month), _day(d._day) {
cout << << endl;
}
:
_year; _month; _day;
};
{
x1 = { };
Date d1 = { , , };
Date d11 = ;
Date& d2 = { , , };
Point p1{ , };
x2{ };
Date d6{ , , };
vector<Date> v;
v.({ , , });
;
}






