提问者:小点点

多个默认构造函数


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

。。。定义说所有默认构造函数(如果有多个)。。。

如何才能有多个默认构造函数,为什么这可能是有用的或者是标准允许的?


共1个答案

匿名用户

默认构造函数不必没有参数; 它们只需要在没有参数的情况下可以调用。

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

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

struct Foo
{
   Foo(int a = 0);
   Foo(std::string str = "");
};

当然,在本例中,如果不提供一个参数,就无法实际使用它们中的任何一个实例化foo(调用将是不明确的)。 但是foo仍然可用,这些仍然是“默认构造函数”。 这正是标准决定对事物进行分类的方式,目的是定义规则。 它并不会真正影响您的代码或编程。

(顺便说一下,我不想分散注意力,但是您应该在这两个上面都有explication!)