[英]C++ ternary operators, Any difference?
我正在閱讀以下內容的區別:
1)
std::string test = level > 10 ? "Master" : "Beginner";
2)
std::string test;
if (level > 10)
test = "Master";
else
test = "Beginner";
在第二種情況下,有人告訴我,在第二種選擇中,正在創建一個我不理解的臨時值。
我了解到,當我們聲明一個沒有初始化的變量時,它會占用垃圾,因此編譯器只保存一個 memory 位置並且不能“工作”來更改它的值。
從語法上講,第一種情況有點等價於:
constexpr const char* f(int level) {
if (level > 10)
return "Master";
else
return "Beginner";
}
std::string test = f(level);
在這里, test
立即使用"Master"
或"Beginner"
進行初始化。 在第二種情況下, test
首先被默認初始化,然后分配給它任何一個值。
但是,優化后不一定是這樣:編譯器可以很好地在兩種情況下生成完全相同的代碼。
當我們聲明一個沒有初始化的變量時,它需要垃圾
這僅適用於基本類型和 POD 類型,而不是像std::string
這樣具有默認構造函數的類。 查找默認初始化以獲取詳細信息。
沒有理由不使用第一種形式,但是如果編譯器沒有為任何一種生成相同的代碼,編譯器就會出現嚴重的性能問題。 話雖如此,第一種形式清晰易懂,可能會減少優化器的工作量,因此您不妨使用它。 它清楚地說明了將變量初始化為兩個給定值之一的意圖,並且最清楚地表達意圖的代碼通常會產生最好的生成代碼(並且最容易理解)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.