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

高品質 C++/C 程式設計指南 第 4 章:運算子優先級、複合表達式、if/迴圈/switch/goto 風格規範

     編輯:關於C++

4.1 運算子優先級:寧可多括號,不可信記憶

幾十個運算子優先級難記全,**規則 4-1-1**:運算子較多時**加括號明確順序**。


word = (high << 8) | low;
if ((a | b) && (a & c)) ...

4.2 複合表達式:簡潔與可讀的平衡

  • 規則 4-2-1:別寫過度複雜的複合表達式 (i = a>=b && c)。
  • 規則 4-2-2:別搞多用途複合表達式 (d = (a = b + c) + r → 拆成兩句)。
  • 規則 4-2-3:別混淆數學寫法與程式邏輯 (if (a < b < c) ≠ if (a,實為 if ((a)。

4.3 if 語句:與零值比較的標準姿勢

型別標準寫法禁忌寫法
布林if (flag) / if (!flag)if (flag == TRUE), if (flag == 1)... (TRUE 值跨平台不一致,VB 為 -1)
整數if (value == 0) / if (value != 0)if (value) / if (!value) (誤導為布林)
浮點數if (x >= -EPS && x <= EPS)if (x == 0.0) (精度問題,必有誤差帶)
指標if (p == nullptr) / if (p != nullptr)if (p == 0), if (p) (語意模糊:整數?布林?指標?)

補充技巧

  • if (nullptr == p) 防 if (p = nullptr) 誤寫 (編譯器會報錯)。
  • if/else/return 組合:
    if (cond) return x; return y; → 改 if (cond) { return x; } else { return y; } 或 return cond ? x : y;。

4.4 迴圈效能:降低複雜度、調整巢狀順序

  • 建議 4-4-1:多重迴圈,**長迴圈內層、短迴圈外層**,減少 CPU 切換層級開銷。
    
    // 低效:100 外層 x 5 內層 = 500 次切換
    for (row=0; row<100; row++)
      for (col=0; col<5; col++)
    
    // 高效:5 外層 x 100 內層 = 5 次切換
    for (col=0; col<5; col++)
      for (row=0; row<100; row++)
  • 建議 4-4-2:迴圈內有邏輯判斷且次數大 → **提判斷至迴圈外** (避免 N-1 次多餘判斷 + 破壞流水線優化)。
    N 小時保持簡潔;N 大時展開分支。

4.5 for 迴圈控制變數:半開半閉區間 [0, N)

  • 規則 4-5-1:迴圈體內**不可修改控制變數**。
  • 建議 4-5-1:採用 for (int x=0; x (半開半閉),直觀對應 N 次迴圈。
    for (int x=0; x<=N-1; ++x) (閉區間) 需心算 N-1,認知負擔重。

4.6 switch:多分支的規範

  • 規則 4-6-1:每個 case **必加 break**,除非刻意貫穿。
  • 規則 4-6-2:default **不可省略**,哪怕只寫 break,防禦未來擴充遺漏。

4.7 goto:少用、慎用、不禁用

  • 破壞結構化、易跳過建構/初始化/計算 → 隱患。
  • **唯一正當用途**:多重巢狀迴圈**一次性跳出** (如火場跳窗)。
  • 主張:**少用、慎用**,非全面禁用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved