2012-09-10 35 views
0

可能重複的一個實例:
Default constructor with empty brackets
Instantiate class with or without parentheses?С++創建類

計劃:

class Foo 
{ 
    public: 
     Foo (int bar = 1) 
     { 
     cout << "bar=" << bar; 
     } 
}; 

int main() { 

    cout << "0 - "; 
    Foo foo_0 (0) ; 
    cout << '\n'; 

    cout << "1 - "; 
    Foo foo_1(); 
    cout << '\n'; 

    cout << "2 - "; 
    Foo foo_4; 
    cout << '\n'; 

    return 0; 

} 

輸出:

0 - bar=0 
1 - 
2 - bar=1 

問題:爲什麼示例#1不起作用,而示例#0和#2卻起作用?

+0

1? 2? 1和2?我很困惑。 –

回答

7
Foo foo_1(); 

是一個函數聲明,沒有創建對象。這是一個名爲foo_1的函數,它不帶參數並返回Foo對象。

構造對象的正確方法有

Foo foo1; 

這個概念被稱爲C++的vexing parse。一個簡短的描述是,任何可以被視爲聲明的東西都是。

+0

謝謝!綜合答案照常! – Kolyunya

+0

順便說一句,exmaple#0也是正確的,對吧? – Kolyunya

+0

@Kolyunya yes .. –

-2

foo_1();換句話說,它被稱爲Null Intialize,你必須知道對象創建和值初始化之間的區別。

+0

這是錯誤的.. –