C ++初始化列表和构造函数

时间:2016-03-04 23:28:37

标签: c++ constructor c++14

C ++ 14提供了初始化列表,我们可以使用它来初始化类或结构中的元素。以下代码中两种初始化方式有何不同?

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

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

1 个答案:

答案 0 :(得分:4)

在你的情况下,没有区别。第一种情况使用 mem-initializer 来初始化val。第二个使用大括号或等于初始化。当该成员没有 mem-initializer 时,大括号或等于初始化程序将用于成员。如果有 mem-initializer ,则优先,并忽略大括号或等于初始化

当然可以构建一个有差异的人为例子......

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
};