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

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

如果我显式定义一个构造函数 带有 个参数但没有默认构造函数,是否仍会创建默认构造函数?

谢谢!

不,不会,这就是您希望 class 用户明确提供参数的关键。

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

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

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

虽然您可以(从 C++11 开始),但对于 class Foo,请使用语法

Foo() = default;

在 class 声明中 重新引入 编译器生成的默认构造函数。 (请注意,您需要将其放在 public 部分以确保完全等价)。

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

没有。如果您定义构造函数,则只有您定义的构造函数存在。如果要保留默认构造函数,则必须重新定义它。

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