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

5
#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()` 的函数调用。为什么?

那不会解决你的问题,但理想情况下,你的复制构造函数应该采用const引用。 - Etienne de Martel
2个回答

9

仅当没有声明任何构造函数时,才会生成默认构造函数。假设如果你正在定义自己的构造函数,则也可以决定是否需要无参数构造函数,如果需要,则也要定义。

在C++0x中,将有一种显式语法来表示您想要默认构造函数:

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

7

它并不会隐藏默认构造函数,但是在类中声明任何构造函数都会阻止编译器生成默认构造函数,其中任何包括复制构造函数。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接