如果显式定义带参数的构造函数,是否仍然会创建默认构造函数?

Will default constructor still be created if I explicitly define a constructor with arguments?

本文关键字:构造函数 创建 默认 是否 定义 参数 如果      更新时间:2023-10-16

如果我显式定义了一个带有参数但没有默认构造函数的构造函数,还会创建默认构造函数吗?

谢谢!

不,在这种情况下,您必须显式提供默认构造函数。

尽管您可以(从c++ 11开始),对于类Foo,使用语法

Foo() = default;

类声明中的

,其中重新引入了编译器生成的默认构造函数。(注意,您需要将其放在public部分以获得精确的等效性)。

或者,如果您为所有构造函数参数提供默认实参,那么它将成为默认构造函数。

不,它不会,这是当您希望类用户显式地提供参数时的要点。

但是,如果您为参数使用默认值,则它将成为默认构造函数

class Foo
{
     Foo(bool flag=false);  // not a default constructor, but acts the same
};

No。如果定义了构造函数,则只显示所定义的构造函数。如果你想保留默认构造函数,你必须重新定义它。

class MyClass
{
   MyClass(){};
.
.
.
};