Skip to main content

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 使用時機與注意事項

  • 優點: 程式碼簡潔。
  • 缺點: 不適合處理複雜的邏輯。如果 ifelse 區塊中需要執行多行程式碼,就不應該使用三元運算子,否則會讓程式碼變得難以閱讀和維護。
  • 原則:if-else 只是為了根據一個簡單條件來賦予變數不同的值時,就是使用三元運算子的最佳時機。

三元運算子 ? : 是一個非常實用的語法糖 (Syntactic Sugar),能讓你用更精簡的方式寫出條件判斷。熟練使用它可以提升程式碼的美觀與效率,但切記不要濫用,以免降低複雜邏輯的可讀性。