默认构造函数和默认参数构造函数如何在cpp中引起歧义?

时间:2020-10-06 11:34:21

标签: c++

默认构造函数和默认参数构造函数有什么区别?一个例子会有所帮助

2 个答案:

答案 0 :(得分:5)

我想你的意思是这样的:

struct foo {
    foo(int x = 1) {}
    foo() {}
};

default constructor是可以不带参数调用的(我想那是您误解的东西)。上面的两个构造函数都是默认构造函数。两者都可以不带参数调用,也可以在通过

调用构造函数时调用
foo f;

两者都是可行的,编译器无法解决歧义。

答案 1 :(得分:2)

所有参数都具有默认值的构造函数也是该类的默认构造函数。

struct Foo
{
    Foo() = default;
    Foo(int = 0){};
};

int main() {
    Foo f;
}

将不会编译,因为有两个候选的默认构造函数,因此重载解析将失败。 (请注意,Foo f(1);会编译,因为重载解析不再是模棱两可。)