2014-11-24 73 views
0

我在我的書下面的語句:

編譯器何時不創建默認構造函數?

如果我們給予任何構造了一類無論是

1.我們自己explcit默認構造函數(即無參數或具有默認 參數值)

2.我們自己的構造函數的參數
那麼編譯器不會產生隱含的默認構造要麼。

但我對第2點有懷疑,我懷疑我的書籍ID不正確或過時,因爲我的下面的代碼確實有一個帶參數的構造函數,但編譯器也在生成內部構造函數。

#include <iostream> 

class imminent{ 
    public: 
    imminent(int x, int y){ 
    std::cout << "I am explicit constructor" << std::endl; 
    } 
}; 

int main(){ 
    imminent gilfray(); /* compiler creates internal default constructor 
          that why this line is compiled without errors*/ 

    imminent jimmy(1, 2); 
} 

而且,我怎樣才能把我的C++代碼在這裏,因爲這一次我是被迫的代碼片段用JS真正的出路,是不是有任何的C++代碼共享選項?

+7

看看最煩人的解析:http://en.wikipedia.org/wiki/Most_vexing_parse。 '即將gilfray();'是一個函數返回'迫在眉睫' – 2014-11-24 18:19:41

回答

0
imminent gilfray(); 

我相信你打算這行來聲明一個變量gilfray,與imminent類型。

但是,它沒有。
相反,它聲明瞭函數gilfray,沒有參數,返回類型爲imminent

此代碼中未使用默認構造函數。

您可以通過嘗試實際使用它來驗證gilfray不是變量。

gilfray.DoSomething(); // Likely a linker error: "Undefined function gilfray." 

如果您想嘗試使用一個默認的構造函數,它會看起來像:

imminent gilfray; /* Create variable gilfray, with default ctor */ 
+0

OMG!那麼這意味着我不能用gilfray來調用即將發生的數據記憶(如果有的話)? – 2014-11-24 18:29:02

0

在C++ 03,以值初始化的對象,你需要使用一個等號:

imminent gilfray = imminent(); 

在C++ 11,imminent gilfray()還聲明瞭一個函數採取任何參數,返回一個imminent。但是,您可以使用大括號代替。

imminent gilfray{}; // compiler error 
相關問題