C ++中的默认构造函数

时间:2011-05-10 14:01:12

标签: c++ constructor

如果我的班级中有参数的构造函数, 我们需要提供一个do-nothing构造函数,如:

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)会产生歧义,因此我们无法在第二种情况下提供任何无用的构造函数。 因此,即使是编译器提供的隐式构造函数也会在这种情况下得到抑制。

请提供一些澄清/想法。

3 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:3)

如果您没有明确定义一个,则编译器仅生成默认的ctor。因此,如果您定义一个ctor,编译器将不会为该类生成一个ctor。

答案 2 :(得分:1)

如果您需要明确禁用构造函数,可以将其private添加到类中。

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