C 中的短路評估:它和 Java 一樣可靠嗎?
在 Java 中,短路評估是至關重要的功能,實現條件表達式的高效執行。透過使用 && 運算符,Java 保證如果左操作數計算結果為 false,則不會計算右操作數,從而優化效能。
但是,在 C 中,自訂類型的短路計算的可靠性為不太確定。雖然整數和指標等內建類型享有保證的短路行為,但定義自訂類型並重載 && 和 ||運算子可能會損害此行為。
為了說明這一點,請考慮以下 C 範例:
class MyClass { public: MyClass() : value(0) {} int value; bool operator&&(MyClass& other) { cout << "Custom && operator called" << endl; return value && other.value; } }; int main() { MyClass a; if (a == 0 && a.fun()) { cout << "Execution reached the right-hand side of the condition" << endl; } return 0; }
在此範例中,我們為使用者定義的類別 MyClass 重載了 && 運算子。執行 if 語句時,即使左側操作數的計算結果為 false(a == 0 為 false),右側操作數仍會被計算,這是意外的且可能是不合需要的。
因此,雖然C 保證內建類型的短路計算,因此在定義自訂類型和重載邏輯運算子時必須謹慎行事。過載這些運算子可能會導致意外行為並損害短路評估的可靠性。
以上是C 中的短路評估:對於自訂類型是否與 Java 中一樣可靠?的詳細內容。更多資訊請關注PHP中文網其他相關文章!