很清楚编译器会隐式创建一个构造函数但是 如果我们有这样的代码:
class A
{
public:
A(int = 0) {}
};
此构造函数是默认值和转换运算符。
问题:
编译器还会生成“空”默认构造函数A() {}
吗?
答案 0 :(得分:10)
没有。默认构造函数是没有参数或带有默认值的参数的构造函数。
所以,基本上,你已经定义了默认的构造函数。
来自12.1.5
的{{1}}部分说明了这一点:
类X的默认构造函数是类X的构造函数 可以不带参数调用。 [...]
由于您可以在没有参数的情况下调用构造函数,因此它是默认构造函数。因此,编译器不需要声明另一个。
答案 1 :(得分:0)
不,因为你已经声明了一个显式构造函数,编译器不会生成一个无参数(是一个单词?!?)默认值。
鉴于你的构造函数有一个默认参数值,你是否要实例化这样的类:
void main()
{
A myA;
}
你的显式构造函数将被调用..