4
C++ 14提供了初始化列表,我們可以使用它來初始化類或結構中的元素。以下代碼中兩種初始化方式有什麼不同?C++初始化列表和構造函數
struct MyItem {
MyItem() : val{0} {}
int val;
};
struct MyItem {
MyItem() {}
int val{0};
};
C++ 14提供了初始化列表,我們可以使用它來初始化類或結構中的元素。以下代碼中兩種初始化方式有什麼不同?C++初始化列表和構造函數
struct MyItem {
MyItem() : val{0} {}
int val;
};
struct MyItem {
MyItem() {}
int val{0};
};
在你的情況下,沒有區別。第一種情況是使用mem初始化程序初始化val
。第二個使用括號或相等初始值設定程序。當沒有mem初始化程序存在於該成員時,將使用一個括號或等號初始值設定程序。如果存在存儲初始化程序,它將優先,並且括號或等值初始化程序將被忽略。
人們肯定能夠構建做作的例子,其中是有區別的......
const int i = 42;
struct S1 {
S1(int i): val{i} {} // sets val to the parameter i
int val;
};
struct S2 {
S2(int i) {} // param is ignored
int val{i}; // sets val to 42
};