C ++默认参数构造函数与内联初始化优先级

时间:2017-04-12 12:28:18

标签: c++

变量是1还是2并且是编译器还是标准依赖?

class foo {
    int val = 1;

    foo(int bar = 2) : val(bar) {}
}

2 个答案:

答案 0 :(得分:1)

除非在调用构造函数时提供不同的值,否则它为2。 请参阅cpp reference有关非静态数据成员初始化的信息:

  

如果成员具有默认成员初始值设定项并且也出现在   构造函数中的成员初始化列表,默认成员   初始化程序被忽略。

答案 1 :(得分:1)

这里:foo(int bar = 2)被称为默认参数,

并允许您在不提供该参数的情况下调用函数。

如何?

如果你这样做:

foo(100)然后 val 初始化为100

但是如果你省略参数

foo( )然后 val 初始化为2

最后,该声明使这个init变得多余:

int val = 1;