3.5 三元運算子 ? :
3.5.1 三元運算子? :
在 C++ 中,三元運算子(Ternary Operator)是唯一一個需要三個運算元的運算子。它的符號是 ? 和 :。
這個運算子主要用來取代簡單的 if-else 判斷式,讓程式碼在一行內就能完成條件判斷與賦值,非常方便。
語法
三元運算子的基本語法結構如下:
條件式 ? 運算式1 : 運算式2;
條件式 (Condition): 這是一個會回傳 true (真) 或 false (假) 的布林表達式。
- ? : 這是三元運算子的核心符號。
- 運算式1 (Expression1): 如果「條件式」的結果為 true,則執行這個運算式,並將其結果作為整個三元運算式的最終結果。
- 運算式2 (Expression2): 如果「條件式」的結果為 false,則執行這個運算式,並將其結果作為整個三元運算式的最終結果。
3.5.2 實例練習
讓我們來看幾個例子,比較一下使用 if-else 和使用三元運算子的差別。
範例:判斷奇偶數
假設我們要讓使用者輸入一個整數,然後判斷它是奇數還是偶數。
傳統的 if-else 寫法:
int number;
cout << "請輸入一個整數: ";
cin >> number;
string result;
if (number % 2 == 0) {
result = "偶數";
} else {
result = "奇數";
}
cout << "這個數字是 " << result << endl;
使用三元運算子的寫法:
int number;
cout << "請輸入一個整數: ";
cin >> number;
// 一行就搞定!
string result = (number % 2 == 0) ? "偶數" : "奇數";
cout << "這個數字是 " << result << endl;
解說:
在三元運算子的版本中,(number % 2 == 0) 是我們的條件式。
- 如果 number 除以 2 的餘數為 0 (條件為 true),則回傳 ? 後面的字串 "偶數"。
- 如果餘數不為 0 (條件為 false),則回傳 : 後面的字串 "奇數"。
- 最後,回傳的字串會被直接賦值給 result 變數。是不是簡潔很多呢?
你還可以進一步像這樣直接使用他的運算結果
int number;
cout << "請輸入一個整數: ";
cin >> number;
// 注意:要用 ( ) 包覆整個運算式
cout << "這個數字是 " << ((number % 2 == 0) ? "偶數" : "奇數") << endl;
範例:絕對值計算
int a;
cout << "請輸入一個整數 a: ";
cin >> a;
cout << "|a|= " << ((a < 0) ? -a : a) << endl;
3.5.2 使用時機與注意事項
- 優點: 程式碼簡潔。
-
缺點: 不適合處理複雜的邏輯。如果
if或else區塊中需要執行多行程式碼,就不應該使用三元運算子,否則會讓程式碼變得難以閱讀和維護。 -
原則: 當
if-else只是為了根據一個簡單條件來賦予變數不同的值時,就是使用三元運算子的最佳時機。
三元運算子 ? : 是一個非常實用的語法糖 (Syntactic Sugar),能讓你用更精簡的方式寫出條件判斷。熟練使用它可以提升程式碼的美觀與效率,但切記不要濫用,以免降低複雜邏輯的可讀性。