如果我的班级中有参数的构造函数, 我们需要提供一个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)会产生歧义,因此我们无法在第二种情况下提供任何无用的构造函数。 因此,即使是编译器提供的隐式构造函数也会在这种情况下得到抑制。
请提供一些澄清/想法。
答案 0 :(得分:6)
没有参数的构造函数或所有参数都有默认值的构造函数, 是默认构造函数。
如果您提供了编译器,编译器将不会生成一个。
如果对您的类型没有意义,则不必提供默认构造函数。当然,这禁止在需要默认构造函数的地方使用你的类,但这种使用可能也没有意义。
答案 1 :(得分:3)
如果您没有明确定义一个,则编译器仅生成默认的ctor。因此,如果您定义一个ctor,编译器将不会为该类生成一个ctor。
答案 2 :(得分:1)
如果您需要明确禁用构造函数,可以将其private
添加到类中。
请注意,编译器不应该抱怨你没有提供构造函数。你提供一个 - 只有一个 - 它应该自动停止提供默认构造函数