2012-02-05 83 views
1

可能重複:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?爲什麼不「foo f();」調用類「foo」的構造函數?

我碰到了下面的問題。我創建了2個foo實例。 然後我意識到,foo f();沒有執行一個類的構造函數。這是爲什麼?

class foo{ 
public: 
    foo() {cout <<"executed contructor...";} 
}; 

int main() { 
    foo f(); // doesn't run the ctor???? why? 
    foo f2; // this one does execute the ctor 


    system("pause"); 
    return 0; 
} 
+2

看到這個前面的問題http://stackoverflow.com/questions/180172/why-is-it-an-error-to-use-an-empty-set-of-brackets- to-call-a-constructor-with-no – 2012-02-05 15:38:06

+0

搜索最煩人的語法分析 – 2012-02-05 15:42:27

+1

'foo f3(foo());'是最令人頭痛的解析的例子。 'foo f();'只是一個令人頭痛的解析。 – 2012-02-05 15:43:23

回答

6

第一個聲明一個函數。嘗試訪問名爲f的對象。編譯器會沿着這樣的方向投訴:f有非類型foo(),這意味着它是一個不帶參數並返回foo類型的對象的函數。

相關問題