2015-01-15 55 views

回答

6

他們是不同類型的初始化:

T a{b}; // list initialization 
T a = b; // copy initialization 
T a(b); // direct initialization 

沒有爲int沒什麼差別,但有可能會變成其他類型的差異。例如,如果您的構造函數是explicit,而其他兩個會成功,則複製初始化可能會失敗。列表初始化不允許縮小轉換次數,但對於其他兩個很好。

2

據我所知,兩個整數沒有區別。 {}語法是(但不限於,因爲它也用於initializer_list)阻止程序員觸發http://en.wikipedia.org/wiki/Most_vexing_parse,因此而不是std::vector<int> v()來初始化v您編寫std::vector<int> v{};

{}根據用途有不同的行爲,它可以是對構造函數,初始化程序列表以及值的列表的調用,以按定義的順序初始化用戶定義類的成員。

最後的例子:

class Q{ 
public: 
    int a; 
    int b; 
    float f; 
}; 

int main() 
{ 
    Q q{2, 5, 3.25f}; 
} 
相關問題