只見其中程序員使用大括號來初始化變量使用等號運算符或使用大括號將值賦給變量是否有區別?
int var{ 5 };
一個代碼,而不是使用賦值運算符
int var = 5;
我知道將值分配給LHS變量使用大括號是C++ 11語法。使用兩者有什麼區別?
謝謝你的回覆。
只見其中程序員使用大括號來初始化變量使用等號運算符或使用大括號將值賦給變量是否有區別?
int var{ 5 };
一個代碼,而不是使用賦值運算符
int var = 5;
我知道將值分配給LHS變量使用大括號是C++ 11語法。使用兩者有什麼區別?
謝謝你的回覆。
他們是不同類型的初始化:
T a{b}; // list initialization
T a = b; // copy initialization
T a(b); // direct initialization
沒有爲int
沒什麼差別,但有可能會變成其他類型的差異。例如,如果您的構造函數是explicit
,而其他兩個會成功,則複製初始化可能會失敗。列表初始化不允許縮小轉換次數,但對於其他兩個很好。
據我所知,兩個整數沒有區別。 {}
語法是(但不限於,因爲它也用於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};
}
一個是列表初始化,一個不是。 –