@why-math
2014-12-27T07:31:47.000000Z
字数 482
阅读 1045
C++11
C++03中有很多种初始化方式:
std::string a[] = {"Hello", "world"}; // 正确:初始化数组变量
std::vector<std::string> v = {"hello", "world"}; // 错误:初始化列表引用在非聚合的向量上
void f(string a[]);
f ({"foo", "bar"}); // 语法错误,把一个块(block)作为了参数
int a = 2; // "赋值风格"的变化
int aa[] = {2, 3}; // 用初始化列表进行的赋值风格的初始化
complex z(1, 2); // 函数风格的初始化
x = Ptr(y); // "函数风格" 转换/赋值/构造操作
C++11中的统一的初始化方式:
X x1 = X{1, 2};
X x2 = {1, 2};
X x3{1, 2};
X * p = new X{1, 2};
struct D : X {
D(int x, int y) : X{x, y} {/* ... */}
}
struct S {
int a[3];
S(int x, int y, int z) : a{x, y, z} {/* ... */}
}
统一的初始化方式可以减少编程中的错误, 使得代码更易阅读.