Heim >Backend-Entwicklung >C++ >Wie vermeide ich eine unendliche Rekursion, wenn der Operator „==' mit Nullprüfungen überladen wird?

Wie vermeide ich eine unendliche Rekursion, wenn der Operator „==' mit Nullprüfungen überladen wird?

Barbara Streisand
Barbara StreisandOriginal
2025-01-08 15:56:41378Durchsuche

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

Nullprüfungen ordnungsgemäß behandeln, um eine unendliche Rekursion bei „==“-Operatorüberladungen zu vermeiden

Wenn Sie den Operator „==“ überladen, achten Sie darauf, Nullprüfungen ordnungsgemäß durchzuführen, um eine unendliche Rekursion zu verhindern. Der in der Frage bereitgestellte Codeausschnitt zeigt einen falschen Ansatz:

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

Diese Bedingung führt zu einer unendlichen Rekursion, da der zweite Aufruf von == erneut versucht zu prüfen, ob foo1 leer ist, was eine Endlosschleife verursacht.

Korrekter Code

Um dieses Problem zu lösen und eine unendliche Rekursion zu vermeiden, verwenden Sie object.ReferenceEquals für die Nullprüfung:

<code>if (object.ReferenceEquals(foo1, null))
    return object.ReferenceEquals(foo2, null);</code>

Diese Bedingung behandelt korrekt den Fall, in dem foo1 oder foo2 (oder beide) leer sind. Gibt „true“ zurück, wenn beide Operanden leer sind; gibt „false“ zurück, wenn einer oder beide Operanden nicht leer sind.

Vollständige Korrektur

Der korrigierte Code unten integriert diese Änderung in die bereitgestellte Operatorüberladung:

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

Mit dieser Änderung kann das Überladen von Operatoren Nullprüfungen korrekt verarbeiten, ohne dass es zu einer unendlichen Rekursion kommt.

Das obige ist der detaillierte Inhalt vonWie vermeide ich eine unendliche Rekursion, wenn der Operator „==' mit Nullprüfungen überladen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn