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

C++ initialization list and constructor

本文关键字:构造函数 列表 初始化 C++      更新时间:2023-10-16

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

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

在您的情况下,没有区别。第一种情况使用 mem 初始值设定项来初始化val 。第二个使用大括号或等于初始值设定项。当成员不存在 mem 初始值设定项时,将使用该大括号或等于初始值设定项。如果存在 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
};