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

C++ default argument constructor vs inline initialisation priority

本文关键字:初始化 优先级 默认 参数 构造函数 C++      更新时间:2023-10-16

这里的变量是 1 还是 2,这个编译器还是标准依赖?

class foo {
    int val = 1;
    foo(int bar = 2) : val(bar) {}
}

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

如果成员具有默认成员初始值设定项,并且还显示在 构造函数中的成员初始化列表,默认成员 初始值设定项将被忽略。

这里:

foo(int bar = 2)称为默认参数,

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

如何?

如果您这样做:

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

但是如果你省略参数

foo( ) 然后 val 初始化为 2

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

int val = 1;