多个默认构造函数

Zuo*_* Hu 4 c++ overloading constructor-overloading default-constructor language-lawyer

这个堆栈溢出问题中,答案包含以下引用:

...定义表示所有默认构造函数(如果有多个)...

怎么会有多个默认构造函数,为什么这可能有用或被标准允许?

Ast*_*ngs 9

默认构造函数不必没有参数;他们只需要被调用而没有参数。

任何参数都有默认值的构造函数都满足此条件。

[class.dtor/1]:类 X 的默认构造函数是类 X 的构造函数,其中每个不是函数参数包的参数都有一个默认参数(包括没有参数的构造函数的情况)。[..]

struct Foo
{
   Foo(int a = 0);
   Foo(std::string str = "");
};
Run Code Online (Sandbox Code Playgroud)

现在,当然,在这个例子中,你不能Foo在不提供参数的情况下使用它们中的任何一个来实例化 a (调用会不明确)。但Foo仍然可用,而且这些仍然是“默认构造函数”。这就是标准决定对事物进行分类的方式,目的是定义规则。它不会真正影响您的代码或编程。

(顺便说一句,我不想​​分散注意力,但你应该同时拥有explicit这两点!)

  • @ZuodianHu 不太好;) (4认同)
  • 还要考虑到这是一个设计得很糟糕的类,委员会没有必要花时间对其进行优化。 (3认同)