C++11 发展历史
C++11 是 C++ 标准演进中最重要的版本之一,它标准化了既有实践并引入了大量新特性。在 2011 年 8 月正式采纳前,该标准曾被称为 C++0x。从 C++98 到 C++11 经历了约 8 年的开发周期,此后 C++ 更新节奏逐渐稳定为每三年一次。
列表初始化
C++98 传统的{}
在 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;
}
C++11 中的{}
C++11 引入了统一初始化(Uniform Initialization),试图实现一切对象皆可用 {} 初始化。这不仅支持内置类型,也支持自定义类型。对于自定义类型,本质是通过构造函数进行的隐式类型转换,编译器优化后通常直接构造,避免临时对象的产生。
列表初始化的一大便利在于可以省略等号,且在容器 push_back 或 insert 多参数构造的对象时更加简洁。
#include<iostream>
#include<vector>
using namespace std;
struct Point { int _x; int _y; };
class Date {
public:
Date(int year = 1, int month = 1, int 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;
};
{
a1[] = { , , , , };
Point p = { , };
x1 = { };
Date d1 = { , , };
Date d11 = ;
Date& d2 = { , , };
Point p1{ , };
Date d6{ , , };
vector<Date> v;
v.({ , , });
;
}


