use*_*065 3 c++ constructor default-constructor
我写了以下程序
#include <iostream>
class A {
public:
A(int i) {std::cout<<"Overloaded constructor"<<std::endl;}
}
int main() {
A obj;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译程序时,我收到以下错误:
没有匹配函数来调用A :: A()候选者:A :: A(int)A :: A(const A&)
在这种情况下,默认构造函数的存在取决于您是否定义它.如果您自己定义另一个构造函数,则不再隐式定义它.幸运的是,它很容易带回来:
A() = default;
Run Code Online (Sandbox Code Playgroud)
请注意,术语"默认构造函数"是指可以在没有任何参数的情况下调用的任何构造函数(12.1p5); 不仅是有时隐式定义的构造函数.
小智 5
不,根据标准,在这种情况下不会生成默认构造函数。但是,在 C++11 中,您可以声明要使用以下命令生成默认构造函数:
class A {
public:
A() = default;
A(int);
};
Run Code Online (Sandbox Code Playgroud)