C++ C++;默认构造函数和默认参数

C++ C++;默认构造函数和默认参数,c++,parameters,constructor,polymorphism,default-parameters,C++,Parameters,Constructor,Polymorphism,Default Parameters,如果我有一个包含以下内容的类: foo(); //sets baz to 10 foo(int bar = 0); //sets baz to bar int baz; 是否会使用“默认”构造函数 e、 g.将: foo qux; 默认为baz=0或10 以下方面是否存在差异: foo * quux = new foo; 这是一个模棱两可的电话。因此,我认为它甚至不应该编译。编译器无法决定是调用foo::foo(int)构造函数还是调用默认构造函数foo::foo() 是否会使用“默认”构

如果我有一个包含以下内容的类:

foo(); //sets baz to 10
foo(int bar = 0); //sets baz to bar
int baz;
是否会使用“默认”构造函数

e、 g.将:

foo qux;
默认为baz=0或10

以下方面是否存在差异:

foo * quux = new foo;

这是一个模棱两可的电话。因此,我认为它甚至不应该编译。编译器无法决定是调用
foo::foo(int)
构造函数还是调用默认构造函数
foo::foo()

是否会使用“默认”构造函数

不,不指定参数的构造函数调用将是不明确的。编译器无法判断不接受参数的构造函数是否比接受带有默认值的参数的构造函数更可取,反之亦然您的代码无法编译

任何差异:
foo*qux=新foo


不,同样的故事。如果通过
new
创建对象,则不会发生任何更改。编译器仍然无法决定要调用哪个构造函数。

注意:这两个都是默认构造函数。这似乎是一个合理的问题,为什么人们总是因为事情简单而否决它们?来自常见问题解答——“宽容那些可能不知道你所知道的一切的人。”。此外,这并不是你通常会在介绍性C++书籍中发现的东西。