为什么复制构造函数会隐藏C++中的默认构造函数?

Bru*_*uce 5 c++

#include <iostream>
#include <conio.h>

using namespace std;

class Base
{
      int a;
public:
      Base(const Base & b)
      {
                 cout<<"inside constructor"<<endl;
      }   

};

int main()
{
   Base b1;
   getch();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误.没有匹配函数来调用`Base :: Base()'为什么?

Ste*_*sop 9

仅当您未声明任何构造函数时,才会生成默认构造函数.假设你定义了自己的构造函数,那么你也可以决定是否需要一个无参数的构造函数,如果是这样的话,也可以定义它.

在C++ 0x中,会有一个明确的语法来表示你想要默认的构造函数:

struct Foo {
    Foo() = default;
    ... other constructors ...
};
Run Code Online (Sandbox Code Playgroud)


Dav*_*eas 7

它不会隐藏默认构造函数,但声明类中的任何构造函数会禁止编译器生成默认构造函数,其中any包含复制构造函数.

如果存在任何其他构造函数,则禁止生成默认构造函数的基本原理基于以下假设:如果在一种情况下需要特殊初始化,则隐式生成的默认构造函数很可能是不合适的.