C++中的默认构造函数

Default constructors in C++

本文关键字:构造函数 默认 C++      更新时间:2023-10-16

如果我的类中有带有参数的构造函数,我们需要提供一个无所事事的构造函数,例如:

1)

class A
{
  A(){};  //To satisfy the compiler
  //some constructors with parameter
};

只是为了满足编译器。

现在,如果我的类有一个默认参数,例如:

2)

class A
{
//A(){} can't be used expilcilty or implicilty
A(int = 0);
};
A a;

调用 A::() 或 A::A(int = 0) 会存在歧义,因此在第二种情况下我们不能提供任何无所事事的构造函数。在这种情况下,即使是编译器提供的隐式构造函数也会被取代,这是真的吗?

请提供一些澄清/想法。

没有

参数的构造函数或所有参数都具有默认值的构造函数都是默认构造函数。

如果您已提供编译器,则编译器不会生成一个。

如果默认构造函数

对你的类型没有意义,则不必提供默认构造函数。当然,这禁止在需要默认构造函数的地方使用您的类,但这种使用可能也没有意义。

仅当您

未显式定义默认 ctor 时,编译器才会生成默认 ctor。 因此,如果您定义 ctor,编译器将不会为该类生成 ctor。

如果需要显式禁用构造函数,则可以将其private到类中。

请注意,编译器不应该抱怨你没有提供构造函数。一旦你提供一个 - 并且只有一个 - 它应该自动停止提供默认构造函数