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

时间:2010-11-26 14:41:39

标签: 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;
}

这会出错。调用`Base :: Base()'没有匹配函数 为什么呢?

2 个答案:

答案 0 :(得分:9)

只有在未声明任何构造函数时,才会生成默认构造函数。假设你定义了自己的构造函数,那么你也可以决定是否需要一个no-args构造函数,如果是这样也定义它。

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

struct Foo {
    Foo() = default;
    ... other constructors ...
};

答案 1 :(得分:7)

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

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