cpp 11&14 统一初始化方式以及initializer_list,for
- 一致初始化
1
2
3
4
5
6int values[]{1,2,3};
vector<int> v{1,2,3,4,5};
vector<string> cities{
"Berlin","New York"
}
complex<double> c{3.0,4.0} - initializer_list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//***********************//
//initializer_list 传递的是引用,拷贝是浅拷贝
//***********************//
{1,2,3}// 会被编译器构造成一个initializer_list
//如果函数只接收initializer_list 则调用者要自己准备一包initializer_list,来使用
//如果目标函数不接受initializer_list,会被编译器分开来传入
int i;//i的值是未定义
int j{};//设置初值为0
int* p;//未定义初值
int* q{};//设置初值为nullptr
int x1(5.3); // x1=5
int x2 = 5.3;//x2=5
int x3{5.0};//Error:narrowing ||-> GCC Warning
int x4 ={5.3}; // Error:narrowing ||-> GCC Warning
char c1{7};//ok
char c2{99999};//Error:narrowing ||-> GCC Warning
std::vector<int> v1{1,2,3,4,5};//ok
std::vector<int> v1{1,2,3,4,5.5};//Error:narrowing ||-> GCC Warning
max({stirng("Ace"),string("Stacy"),stirng("qqq"),string("ppp")}) //函数可以接收initializer_list,作为入参
min({1,2,3,4})//函数可以接收initializer_list,作为入参cpp 11&14 统一初始化方式以及initializer_list
一致初始化
code
1
2
3
4
5
6int values[]{1,2,3};
vector<int> v{1,2,3,4,5};
vector<string> cities{
"Berlin","New York"
}
complex<double> c{3.0,4.0}
initializer_list
接受任意个参数,但类型要相同
code
1 |
|
sample 正确
1 | class P{ |
sample 错误
1 | class P{ |
explicit 当构造函数含有多个入参时
explicit 应用在只有一个参数在构造函数时
old version
1 | //******************************* |
c11 version
1 | ``` |
技术实现细节
array 容器的TR1(版本)
1 | template <typename _Tp,std::size_t _Nm> |
initializer_list的实现
1 | // std::initializer_list support -*- C++ -*- |
1 | { |
for 新的写法
使用引用可以使遍历更加快速,同时可以修改变量的值
关联式容器不可以修改值
- set
- map
- unorder_set
- unorder_map
- multiset
- multimap
code
1 |
|
实现
1 | vector<double> vec; |
转型实现
1 |
|