默认构造函数和默认参数构造函数有什么区别?一个例子会有所帮助
答案 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);
会编译,因为重载解析不再是模棱两可。)