如果我们在c ++中重载构造函数,默认构造函数是否仍然存在?

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&)

eq-*_*eq- 6

在这种情况下,默认构造函数的存在取决于您是否定义它.如果您自己定义另一个构造函数,则不再隐式定义它.幸运的是,它很容易带回来:

A() = default;
Run Code Online (Sandbox Code Playgroud)

请注意,术语"默认构造函数"是指可以在没有任何参数的情况下调用的任何构造函数(12.1p5); 不仅是有时隐式定义的构造函数.

  • 如果你有C++ 11. (2认同)

小智 5

不,根据标准,在这种情况下不会生成默认构造函数。但是,在 C++11 中,您可以声明要使用以下命令生成默认构造函数:

class A {
public:
  A() = default;
  A(int);
};
Run Code Online (Sandbox Code Playgroud)