C++03中有很多種初始化方式:
std::string a[] = {"Hello", "world"}; // 正確:初始化數(shù)組變量
std::vector<std::string> v = {"hello", "world"}; // 錯誤:初始化列表引用在非聚合的向量上
void f(string a[]);
f ({"foo", "bar"}); // 語法錯誤勿负,把一個塊(block)作為了參數(shù)
int a = 2; // "賦值風(fēng)格"的變化
int aa[] = {2, 3}; // 用初始化列表進行的賦值風(fēng)格的初始化
complex z(1, 2); // 函數(shù)風(fēng)格的初始化
x = Ptr(y); // "函數(shù)風(fēng)格" 轉(zhuǎn)換/賦值/構(gòu)造操作
C++11中的統(tǒng)一的初始化方式:
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} {/* ... */}
}
統(tǒng)一的初始化方式可以減少編程中的錯誤, 使得代碼更易閱讀.