開啟章節選單
三元運算子
罕見基本定義
當你在網路上瀏覽其他人寫的 code 時,可能會看到一種包含 ?
、:
,簡潔但是又很令人疑惑的語法,這就是所謂的三元運算子,大致的架構如下:
(條件) ? (條件為 true 時回傳的敘述) : (條件為 false 時回傳的敘述)
不過這邊要注意的是,(條件為 true 時回傳的敘述) 和 (條件為 false 時回傳的敘述) 的型態必須相同,否則會出現錯誤。
以我們前面曾舉過的程式碼為例:
int score; cin >> score; if (score >= 60) { cout << "Oh yes~"; } else { cout << "Oh no qwq..."; }
這時候你的code可以簡化成:
cout << ( score >= 60 ? "Oh yes~" : "Oh no qwq...");
這時候你的程式就會做跟上面原始程式碼一樣的事情,先去檢查分數有沒有大於等於 60 分,有的話就輸出夾在 ?
和 :
中間的字串,否則就是 :
後面的。現在因為 code 都比較短,而且比較不會有冗餘的東西,所以比較難感受三元運算子的強大,但是當有天你定義變數或輸出時不想打很多個 if
,那三元運算子將會發揮很大的功用。
例子們
以下是幾個好的例子:
- 取最大值/最小值
cout << ( x > y ? x : y );
int max_num = ( x > y ? x : y );
- 判斷奇偶數/正負數
cout << ( x % 2 ? "Odd" : "Even" ); // x % 2 == 1 => 是奇數,true cout << ( x > 0 ? '+' : '-' ); // x > 0 => 是正,true(請先忽略等於0的情況)
接下來看看錯誤示範:
- 論雙引號和單引號能差多少
一樣是正負數
cout << ( x > 0 ? "+" : '-' ); // 字元跟字串可是不一樣的啊
error: operands to ?: have different types 'const char*' and 'char'
cout << ( x > 0 ? "+" : '-' );
~~~~~~^~~~~~~~~~~
打錯一個引號就會 CE!所以用三元運算子的時候還得小心謹慎才是!
小測驗
(a > b) ? a : b
的意思是什麼?