关于隐式构造函数的创建?

时间:2012-01-23 18:31:41

标签: c++ constructor

很清楚编译器会隐式创建一个构造函数但是 如果我们有这样的代码:

class A
{
    public:
       A(int = 0) {}

};

此构造函数是默认值和转换运算符。

问题:

编译器还会生成“空”默认构造函数A() {}吗?

2 个答案:

答案 0 :(得分:10)

没有。默认构造函数是没有参数或带有默认值的参数的构造函数。

所以,基本上,你已经定义了默认的构造函数。

来自12.1.5的{​​{1}}部分说明了这一点:

  

类X的默认构造函数是类X的构造函数   可以不带参数调用。 [...]

由于您可以在没有参数的情况下调用构造函数,因此它是默认构造函数。因此,编译器不需要声明另一个。

答案 1 :(得分:0)

不,因为你已经声明了一个显式构造函数,编译器不会生成一个无参数(是一个单词?!?)默认值。

鉴于你的构造函数有一个默认参数值,你是否要实例化这样的类:

void main()
{
    A myA;
}

你的显式构造函数将被调用..