2011-03-21 69 views
1
#include<iostream> 

class _ctor 
{ 
public: 
_ctor() { std::cout<<"\nCtor";} 
~_ctor(){ std::cout<<"\nDtor";} 
}; 

_ctor A(); // --> Is the Constructor Really called? I do not see the Output printed 
//_ctor A; 

int main(){ 
return 0; 
} 

上面代碼的輸出在此Link 給出我沒有看到構造函數獲取調用,可能是什麼問題?如果它不應該被稱爲那麼這是什麼意思_ctor A();構造函數在這裏被調用嗎?

+0

FYI名字'_ctor'被保留,這使得你的程序形成不良的(這無關與已經回答了這個問題)。在[這個問題]中的更多細節(http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier) – Motti 2011-03-21 19:18:03

回答

10

您聲明瞭一個名爲A()的函數,它返回_ctor,並且您從未調用該函數。你從來沒有定義過這個功能。

不,不會調用_ctor的構造函數。

+3

請參閱http:// stackoverflow。 com/questions/180172 /爲什麼這是一個錯誤使用一個空集括號呼叫構造沒有 – 2011-03-21 18:31:45

+0

有趣的是,這種情況在這裏持續出現,當我第一次讀到這個時,我認爲它是一個角落案例。 – Ilkka 2011-03-21 18:36:45

0

爲了能夠調用構造函數,程序需要實例化類_ctor

_ctor A(); 

上面的語句是功能A()原型說,它的返回類型爲_ctor

+0

http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.2 – Mahesh 2011-03-21 18:36:36

1

您正在聲明一個名爲A的函數,該函數返回一個ctor類對象,因此不會調用構造函數。

如果你想創建構造函數類的一個全局對象,你可以這樣做:

_ctor A; 

它調用構造函數。

5

不,因爲你實際上聲明瞭一個不帶參數並返回_ctor的函數。這就是所謂的"the most vexing parse."你可能想這樣的:

_ctor A;