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

More Effective C++:別重載 && 和 || —— 短路求值將失效

     編輯:關於C++

C/C++ 邏輯運算符 &&、|| 具備**短路求值**:一旦結果確定,剩餘表達式不再計算。例:


if (p != 0 && strlen(p) > 10) ... // p 為空時不調用 strlen
if (index < lower || index > upper) ... // 前真則不查後

程序員長期依賴此特性寫安全代碼。

重載後的災難

C++ 允許重載 operator&&、operator||,但**重載瞬間短路失效**:

  • 函數調用**必須先計算所有參數** → 兩側表達式無條件求值。
  • C++ **未規定參數求值順序** → 左右誰先算不確定,與短路「左到右」徹底背離。

等價轉換:


expression1 && expression2
// 變為
expression1.operator&&(expression2) // 成員函數
// 或
operator&&(expression1, expression2) // 全局函數

看似無異,實則打破遊戲規則。**切勿重載邏輯運算符**,除非極度確信不需要短路(極罕見)。

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