ホームページ > バックエンド開発 > C++ > Null を処理するときに演算子のオーバーロードで無限再帰を防ぐにはどうすればよいですか?

Null を処理するときに演算子のオーバーロードで無限再帰を防ぐにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-08 16:12:44
オリジナル
262 人が閲覧しました

How to Prevent Infinite Recursion in Operator Overloading When Handling Nulls?

演算子のオーバーロードで null 値を扱うときに無限再帰を回避するにはどうすればよいですか?

比較演算子のオーバーロードを定義する場合、無限再帰を避けるために 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 (foo1 == null) return foo2 == null;
    return foo1.Equals(foo2);
}</code>
ログイン後にコピー
このシナリオでは、== 演算子のオーバーロードは、オペランドの 1 つが空の場合にそれ自体を再帰的に呼び出します。この問題を回避するには、

メソッドを使用して null 値を明示的にチェックする必要があります。 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>
ログイン後にコピー
を使用すると、オーバーロードは等価比較を続行する前に両方のオペランドが空かどうかをチェックします。これにより、無限再帰が防止され、null の場合でも正しい動作が保証されます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート