2016-03-04 75 views
4

C++ 14提供了初始化列表,我們可以使用它來初始化類或結構中的元素。以下代碼中兩種初始化方式有什麼不同?C++初始化列表和構造函數

struct MyItem { 
    MyItem() : val{0} {} 
    int val; 
}; 

struct MyItem { 
    MyItem() {} 
    int val{0}; 
}; 

回答

4

在你的情況下,沒有區別。第一種情況是使用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 
};