2016-03-04 69 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 
}; 
相关问题