2016-12-08 50 views
-1

最近,我在一個項目中看到了下面的代碼片段。我不能直接粘貼項目代碼,而是寫一個類似的代碼。我不明白爲什麼「有趣(A {a});」 可以通過編輯和工作:(有誰知道這樣的C++功能?什麼是「A {一}」呢? 非常感謝!誰知道C++下面代碼的哪個特性是?

class A { 
public: 
    int x = 10; 
    int y = 20; 
}; 

void fun(A a) { 
    cout << "A.x = " << a.x << endl; 
    cout << "A.y = " << a.y << endl; 
} 

int main() { 
    A a; 
    fun(A{a}); 
    return 0; 
} 
+0

我認爲這是列表初始化。更多信息在這裏:http://stackoverflow.com/questions/18222926/why-is-list-initialization-using-curly-braces-better-than-the-alternatives –

+0

感謝您的回覆:)。一開始,我也認爲它應該是列表初始化。但是我仍然找不到任何證據表明我們可以將班級名稱放在「{}」的前面。我也做了一個測試。我將列表初始化器構造函數添加到類中。但不幸的是,它沒有被調用。所以我提出了這個問題。 –

+0

這是一個花括號初始化程序,在C++ 11中引入的語法。 C++ 03無法直接初始化臨時POD。人們不得不訴諸愚蠢的工廠職能。這個特殊的示例副本構造了臨時的。 –

回答

2

感謝大家的幫助,尤其是對@slawekwin !:)我終於找到答案。

T { arg1, arg2, ... };是一種列表初始化,它創建一個未命名的臨時表。 欲瞭解更多信息,請參考此link

+1

你也可以接受它,所以問題有它的關閉:) – slawekwin

相關問題