ホームページ >バックエンド開発 >C++ >== 演算子を Null 値でオーバーロードするときに無限再帰を防ぐ方法は?

== 演算子を Null 値でオーバーロードするときに無限再帰を防ぐ方法は?

DDD
DDDオリジナル
2025-01-08 16:07:41749ブラウズ

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

== 演算子をオーバーロードする場合の null 値の処理

場合によっては、次のコードで == 演算子をオーバーロードしようとすると、無限再帰が発生する可能性があります:

<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>

問題は、特定の null チェックを行わないと、== 比較で == 演算子オーバーロード メソッドが再帰的に呼び出され、foo1 と foo2 を比較することです。 foo1 が空であるため、再帰ループがトリガーされます。

この問題を解決するには、ReferenceEquals を使用して null 値チェックを追加します。

<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 を使用して null 値をチェックすることで、== 演算子のオーバーロードされたメソッドが無限に再帰せず、null 比較を適切に処理できるようになります。

以上が== 演算子を Null 値でオーバーロードするときに無限再帰を防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。