幾十個運算子優先級難記全,**規則 4-1-1**:運算子較多時**加括號明確順序**。
word = (high << 8) | low;
if ((a | b) && (a & c)) ...
i = a>=b && c)。 d = (a = b + c) + r → 拆成兩句)。if (a < b < c) ≠ if (a,實為 if ((a)。| 型別 | 標準寫法 | 禁忌寫法 |
|---|---|---|
| 布林 | 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;。
// 低效: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++)
N 小時保持簡潔;N 大時展開分支。for (int x=0; x (半開半閉),直觀對應 N 次迴圈。
for (int x=0; x<=N-1; ++x) (閉區間) 需心算 N-1,認知負擔重。 case **必加 break**,除非刻意貫穿。default **不可省略**,哪怕只寫 break,防禦未來擴充遺漏。