條件運算子?:
允許把簡單的if-else
邏輯嵌入到單個表示式中,條件運算子按照如下形式使用:
cond ? expr1 : expr2
其中cond
是判斷條件的表示式,而expr1
和expr2
是兩個型別相同或可能轉換為某個公共型別的表示式。
條件運算子的執行過程:
求cond
的值;
如果條件為真對expr1
求值並返回該值;
否則對expr2
求值並返回該值。
當條件運算子的兩個表示式都是左值或者能轉換為同一種左值型別時,運算的結果是左值;否則運算的結果是右值。
巢狀條件運算子
允許在條件運算子的內部巢狀另外乙個條件運算子。也就是說,條件表示式可以作為另外乙個條件運算子的cond
或expr
。
舉例如下:使用一對巢狀的條件運算子將成績分為三檔:優秀(high pass)、合格(pass)、不合格(fail)
條件運算子滿足右結合律,意味著運算物件(一般)按照從右向左的順序組合。finalgrade =
(grade >90)
?"high pass"
:(grade <60)
?"fail"
:"pass"
;
在輸出表示式中使用條件運算子
條件運算子的優先順序非常低,因此當一條長表示式中巢狀了條件運運算元表示式時,通常需要在它的兩端加上括號。
第二條表示式等價於cout <<
((grade <60)
?"fail"
:"pass");
// 輸出 pass 或者 fail
cout <<
(grade <60)
?"fail"
:"pass"
;// 輸出 1 或者 0!
cout << grade <60?
"fail"
:"pass"
;// 錯誤:試圖比較 cout 和 60
第三條表示式等價於cout <<
(grade <60)
;// 輸出 1 或者 0
cout ?
"fail"
:"pass"
;// 根據 cout 的值是 true 還是 false 產生對應的字面值
cout << grade;
// 小於運算子的優先順序低於移位運算子,所以先輸出 grade
cout <60?
"fail"
:"pass"
;// 然後比較 cout 和 60!
第四章 4 7 條件運算子
4.21 編寫一段程式,使用條件運算子從vector int 中找到哪些元素的值是奇數,然後將這些奇數的值翻倍。0 ifelse更容易理解,條件運算子更簡潔。4.23修改語句 string s word string p1 s s s.size 1 s s err 優先順序高於 string p1 ...
第四章 表示式 4 2 算術運算子
上圖中按照運算子的優先順序將其分組。一元運算子的優先順序最高,接下來是乘法和除法,優先順序最低的是加法和減法。上述所有運算子都滿足做左結合律,意味著當優先順序相同時按照從左向右的順序進行組合。算術運算子能作用於任意算術型別以及任意能轉換為算術型別的型別。算術運算子的運算物件和求值結果都是右值。一元運...
第四章 表示式 4 4 賦值運算子
賦值運算子的左側運算物件必須是乙個可修改的左值。賦值運算的結果是它的左側運算物件,並且是乙個左值。結果的型別就是左側運算物件的型別,如果賦值運算子的左右兩個運算物件型別不同,則右側運算物件將轉換成左側運算物件的型別。賦值運算子滿足右結合律 對於多重賦值語句中的每乙個物件,她的型別或者與右邊物件的型別...