![](/img/trans.png)
[英]C++ explicit universal reference constructor does not hide copy constructor?
[英]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.