前言
随着现代软件开发的快速发展,编程语言也在不断进化。C++11 是 C++ 语言的一个重要版本,于 2011 年正式发布,引入了许多全新的特性,极大地提升了代码的效率、可读性以及程序的执行性能。从增强的类型推断到智能指针,从并发编程的支持到对 Lambda 表达式的引入,C++11 使得开发者在编写高效且可维护的代码时拥有了更多的选择。
1. C++11 的发展历史
C++11 是 C++ 的第二个主要版本,并且是从 C++98 起的最重要更新。它引入了大量更改,标准化了既有实践,并改进了对 C++ 程序员可用的抽象。在它最终由 ISO 在 2011 年 8 月 12 日采纳前,人们曾使用名称'C++0x',因为它曾被期待在 2010 年之前发布。C++03 与 C++11 期间花了 8 年时间,故而这是迄今为止最长的版本间隔。从那时起,C++ 有规律地每 3 年更新一次。

2. 列表初始化
2.1 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;
}
2.2 C++11 中的{}
C++11 以后想统一初始化方式,试图实现一切对象皆可用{}初始化,{}初始化也叫做列表初始化。
- 内置类型支持,自定义类型也支持,自定义类型本质是类型转换,中间会产生临时对象,最后优化后变成直接构造。
- {}初始化的过程中,可以省略掉=。
- C++11 列表初始化的本意是想实现一个大统一的初始化方式,其次在有些场景下带来的不少便利,如容器 push/inset 多参数构造的对象时,{}初始化会很方便。
#include<iostream>
#include<vector>
using namespace std;
struct { a; b; };
{
:
( 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;
};
{
a[] = { , , , , };
a2[] = { };
P p = { , };
x1 = { };
Date d1 = { , , };
Date& d2 = { , , };
Date d3 = { };
Date d4 = ;
P p1{ , };
x2{ };
Date d6{ , , };
Date& d7{ , , };
vector<Date> v;
v.(d1);
v.((, , ));
v.({ , , });
;
}





