C++和构造函数中的类

The*_*tor 2 c++ constructor class

一个类可以有几个默认的构造函数吗?我想知道因为我认为任何东西都只能通过"默认"的定义只有一个默认功能,但我不太确定.

cel*_*chk 7

一个类可以有几个默认构造函数.但是在这种情况下,你不能默认构造它,因为在尝试这样做时,你会遇到歧义:

class C
{
public:
  C(); // a default constructor
  C(int = 0); // another default constructor
};

C c1; // error: ambiguity; both C::C() or C::C(int) with the default argument 0 match
C c2(0); // OK, no ambiguity
Run Code Online (Sandbox Code Playgroud)

但请注意,您不能拥有两个具有相同签名的构造函数:

class C2
{
public:
  C2() {}
  C2() {} // error: C2::C2() already defined
};
Run Code Online (Sandbox Code Playgroud)

  • @chris:这是标准中的正确部分.`std :: is_default_constructible <C>`表示`C c;`是否格式正确.它不是(因为含糊不清),所以`std :: is_default_constructible <C>`是正确的,即使默认构造函数存在且可访问. (2认同)
  • @KerrekSB,这将是我引用的部分.我只是因为使用`std :: add_rvalue_reference`而略微抛弃了.基本上,`std :: is_default_constructible`归结为`T t();`格式正确,除非像这样简化,否则它将成为一个函数,在下面的措辞中明确禁止. (2认同)