首頁 >後端開發 >C++ >使用空值重載 == 運算子時如何防止無限遞歸?

使用空值重載 == 運算子時如何防止無限遞歸?

DDD
DDD原創
2025-01-08 16:07:41771瀏覽

How to Prevent Infinite Recursion When Overloading the == Operator with Null Values?

重載 == 運算子時處理空值

在某些情況下,嘗試使用以下程式碼重載 == 運算子可能會導致無限遞歸:

<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);

public static bool operator ==(Foo foo1, Foo foo2) {
    return foo1 == null ? foo2 == null : foo1.Equals(foo2);
}</code>

問題在於,如果沒有進行具體的空值檢查,== 比較會遞歸呼叫 == 運算子重載方法來比較 foo1 和 foo2。由於 foo1 為空,因此會觸發遞歸循環。

為了解決這個問題,可以使用 ReferenceEquals 加入空值檢查:

<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);

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

透過使用 ReferenceEquals 檢查空值,可以確保 == 運算子重載方法不會無限遞歸,從而可以優雅地處理空值比較。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn