ホームページ >バックエンド開発 >C++ >Null チェックで「==」演算子をオーバーロードするときに無限再帰を回避するにはどうすればよいですか?

Null チェックで「==」演算子をオーバーロードするときに無限再帰を回避するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-08 15:56:41378ブラウズ

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

「==」演算子のオーバーロードでの無限再帰を避けるために null チェックを適切に処理します

「==」演算子をオーバーロードする場合は、無限再帰を防ぐために必ず null チェックを適切に処理してください。質問に示されているコード スニペットは、間違ったアプローチを示しています:

<code>if (foo1 == null) return foo2 == null;</code>

この条件では、== の 2 回目の呼び出しで foo1 が空かどうかを再度確認しようとするため、無限再帰が発生し、無限ループが発生します。

正しいコード

この問題を解決し、無限再帰を回避するには、null チェックに 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>

この変更により、演算子のオーバーロードは無限再帰を引き起こすことなく null チェックを正しく処理できるようになります。

以上がNull チェックで「==」演算子をオーバーロードするときに無限再帰を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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