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
Freigeben: 2025-01-08 15:56:41
Original
375 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage