如果我显式定义带参数的构造函数,是否仍会创建默认构造函数?
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(){};
.
.
.
};
如果我显式定义一个构造函数 带有 个参数但没有默认构造函数,是否仍会创建默认构造函数?
谢谢!
不,不会,这就是您希望 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(){};
.
.
.
};