C/C++ 邏輯運算符 &&、|| 具備**短路求值**:一旦結果確定,剩餘表達式不再計算。例:
if (p != 0 && strlen(p) > 10) ... // p 為空時不調用 strlen
if (index < lower || index > upper) ... // 前真則不查後
程序員長期依賴此特性寫安全代碼。
C++ 允許重載 operator&&、operator||,但**重載瞬間短路失效**:
等價轉換:
expression1 && expression2
// 變為
expression1.operator&&(expression2) // 成員函數
// 或
operator&&(expression1, expression2) // 全局函數
看似無異,實則打破遊戲規則。**切勿重載邏輯運算符**,除非極度確信不需要短路(極罕見)。