默认构造函数不必没有参数; 它们只需要在没有参数的情况下可以调用。
任何参数都具有默认值的构造函数都满足此条件。
[class.dtor/1]:
类X的默认构造函数是类X的一个构造函数,它的每个不是函数参数包的参数都有一个默认参数(包括没有参数的构造函数的情况)。 [..]
struct Foo
{
Foo(int a = 0);
Foo(std::string str = "");
};
当然,在本例中,如果不提供一个参数,就无法实际使用它们中的任何一个实例化foo
(调用将是不明确的)。 但是foo
仍然可用,这些仍然是“默认构造函数”。 这正是标准决定对事物进行分类的方式,目的是定义规则。 它并不会真正影响您的代码或编程。
(顺便说一下,我不想分散注意力,但是您应该在这两个上面都有explication
!)