首頁 > 後端開發 > C++ > 使用空檢查重載'==”運算子時如何避免無限遞歸?

使用空檢查重載'==”運算子時如何避免無限遞歸?

Barbara Streisand
發布: 2025-01-08 15:56:41
原創
354 人瀏覽過

How to Avoid Infinite Recursion When Overloading the '==' Operator with Null Checks?

正確處理空值檢查,避免'=='運算子重載中的無限遞歸

重載'=='運算子時,務必正確處理空值檢查以防止無限遞歸。問題中提供的程式碼片段展示了一種錯誤的方法:

<code>if (foo1 == null) return foo2 == null;</code>
登入後複製

此條件會導致無限遞歸,因為對 == 的第二次呼叫將再次嘗試檢查 foo1 是否為空,從而導致死循環。

正確的程式碼

為了解決這個問題並避免無限遞歸,請使用 object.ReferenceEquals 進行空值檢查:

<code>if (object.ReferenceEquals(foo1, null))
    return object.ReferenceEquals(foo2, null);</code>
登入後複製

此條件可以正確處理 foo1 或 foo2(或兩者)為空的情況。如果兩個操作數都為空,則傳回 true;如果一個或兩個操作數不為空,則傳回 false。

完整的修正

下面的修正程式碼將此修改合併到提供的運算子重載中:

<code>public static bool operator ==(Foo foo1, Foo foo2) {
    if (object.ReferenceEquals(foo1, null))
        return object.ReferenceEquals(foo2, null);
    return foo1.Equals(foo2);
}</code>
登入後複製

透過此更改,運算子重載將能夠正確處理空值檢查,而不會導致無限遞歸。

以上是使用空檢查重載'==”運算子時如何避免無限遞歸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板