构造函数是否忽略提供给构造函数的参数的成员初始化列表的部分? 我试图全面理解构造函数在C++中的工作方式。特别是构造函数的成员初始化列表

构造函数是否忽略提供给构造函数的参数的成员初始化列表的部分? 我试图全面理解构造函数在C++中的工作方式。特别是构造函数的成员初始化列表,c++,constructor,C++,Constructor,假设您有一个具有三个数据成员bar、baz和qux的Foobar类 我这样设置我的构造函数: Foobar(int bar, int baz, int qux) : bar(bar), baz(baz), qux(qux) { // empty constructor body } 我的问题是,成员初始化列表是否作为“默认值”?还是总是这样?例如,如果使用参数调用构造函数,是否会忽略初始化列表? 除非另有规定,否则我希望qux数据成员始终为0。因此,我会将成员初始化行写为: :

假设您有一个具有三个数据成员bar、baz和qux的Foobar类

我这样设置我的构造函数:

Foobar(int bar, int baz, int qux)
    : bar(bar), baz(baz), qux(qux)
{
  // empty constructor body
}
我的问题是,成员初始化列表是否作为“默认值”?还是总是这样?例如,如果使用参数调用构造函数,是否会忽略初始化列表? 除非另有规定,否则我希望qux数据成员始终为0。因此,我会将成员初始化行写为:

  : nar(bar), bar(baz), qux(0)

也许我完全误解了成员初始化列表的功能,也许有人可以帮我澄清一下。

没有参数就不能调用构造函数,因为这三个参数都是必需的。如果你忘记了,编译器会提醒你


如果您总是希望将成员初始化为固定值,那么实现方法正是您所建议的。

我认为您的混淆是由于构造函数的参数名与成员名相同这一事实造成的。虽然这是合法的,但我建议您使用不同的名称,可能只需在参数前面加下划线即可。可能重复@BenjaminLindley为什么要在大家都知道的语言规则中使用愚蠢的下划线#IdRatherNotUnderscore@CaptainGiraffe字体因为不是每个人都知道。下划线并不愚蠢,它们很奇妙。@BenjaminLindley它们有一个隐含的含义。这一点都不奇怪。你也可以在回答中把
qux=0
的语法作为默认参数。