首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 判斷陳述式完整指南:if、switch、條件運算子與最佳實務

     編輯:C++ 入門

C++ 判斷陳述式完整指南:if、switch、條件運算子與最佳實務

判斷結構讓程式依條件選擇執行路徑。核心:指定條件、條件為真時執行的區塊、可選的假時區塊。

if 陳述式家族

基本 if

if (條件) {
    // 條件為真執行
}

if-else

if (條件) {
    // 真
} else {
    // 假
}

if-else if-else 鏈

if (score >= 90) grade = 'A';
else if (score >= 80) grade = 'B';
else if (score >= 70) grade = 'C';
else grade = 'F';

巢狀 if

在 if/else 區塊內再包含 if,邏輯層級加深。注意 dangling else 問題:else 總與最近的未配對 if 綁定,建議永遠使用大括號明確範圍。

switch 陳述式

適用於整數/枚舉/類別可轉整數的多重分支,語法:

switch (運算式) {
    case 常數值1:
        陳述式群;
        break;  // 關鍵:防止貫穿
    case 常數值2:
        陳述式群;
        break;
    default:    // 可選:無匹配時執行
        陳述式群;
}

關鍵規則:

  • case 標籤必須為編譯期常數整數。
  • 無 break 會貫穿執行下一個 case(有時刻意利用)。
  • default 建議保留,處理未預期值。

條件運算子 (三元運算子) ? :

表達式層級的簡易分支:

結果 = (條件) ? 真值 : 假值;

範例:int max = (a > b) ? a : b;

  • 優點:簡潔、可用於初始化、常數表達式。
  • 缺點:嵌套難讀,複雜邏輯請改用 if/else。

最佳實務與常見陷阱

主題建議
條件寫法避免 if (x = 5) 賦值錯誤,啟用編譯器警告;習慣 if (5 == x) (Yoda 條件) 或靜態分析工具。
布林轉換非零即真,零為假。指標、整數、浮點數皆可直接作條件。
浮點比較勿用 ==,改用 fabs(a-b) < epsilon。
switch 字串C++ 原生不支援,改用 if-else 鏈、unordered_map 查表或 enum 映射。
大括號風格即使單行陳述式,建議加大括號,防維護時引入錯誤。
提早返回Guard Clauses:先處理邊界/錯誤情況 return,主流程保持淺層縮排。

現代 C++ 增強

  • constexpr if (C++17):編譯期分支,移除死碼,用於模板元編程。
    if constexpr (std::is_integral_v<T>) { ... }
  • std::optional / std::variant:以型別系統表達「可能無值」或「多種型別之一」,減少條件判斷。
  • 模式匹配 (提案中):未來將提供更強大的 switch 替代方案。

總結

掌握 if/else、switch、?: 三大工具,配合大括號習慣、Guard Clauses、constexpr if,撰寫清晰、健壯、可維護的分支邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved