簡體   English   中英

為什么復制構造函數會隱藏C ++中的默認構造函數?

[英]Why does copy constructor hide the default constructor in 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()'為什么?

僅當您未聲明任何構造函數時,才會生成默認構造函數。 假設你定義了自己的構造函數,那么你也可以決定是否需要一個無參數的構造函數,如果是這樣的話,也可以定義它。

在C ++ 0x中,會有一個明確的語法來表示你想要默認的構造函數:

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

它不會隱藏默認構造函數,但聲明類中的任何構造函數會禁止編譯器生成默認構造函數,其中any包含復制構造函數。

如果存在任何其他構造函數,則禁止生成默認構造函數的基本原理基於以下假設:如果在一種情況下需要特殊初始化,則隱式生成的默認構造函數很可能是不合適的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM