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

时间:2016-08-17 11:39:20

标签: c++ constructor default

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

谢谢!

3 个答案:

答案 0 :(得分:7)

不,在这种情况下你必须明确提供默认构造函数。

虽然你可以(从C ++ 11开始),对于一个类Foo,使用语法

Foo() = default;

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

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

答案 1 :(得分:4)

不,它不会,这就是你希望类用户明确提供参数的时候。

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

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

答案 2 :(得分:0)

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

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