Heim > Backend-Entwicklung > C++ > Wie kann eine unendliche Rekursion bei der Operatorüberladung beim Umgang mit Nullen verhindert werden?

Wie kann eine unendliche Rekursion bei der Operatorüberladung beim Umgang mit Nullen verhindert werden?

Mary-Kate Olsen
Freigeben: 2025-01-08 16:12:44
Original
263 Leute haben es durchsucht

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

Wie vermeide ich eine unendliche Rekursion beim Umgang mit Nullwerten bei der Operatorüberladung?

Beim Definieren von Überladungen von Vergleichsoperatoren ist es wichtig, Nullfälle korrekt zu behandeln, um eine unendliche Rekursion zu vermeiden. Der folgende Code demonstriert das Problem der unendlichen Rekursion beim Überladen des ==-Operators:

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

In diesem Szenario ruft sich die Operatorüberladung == selbst rekursiv auf, wenn einer ihrer Operanden leer ist. Um dieses Problem zu vermeiden, müssen Sie mithilfe der Methode ReferenceEquals explizit nach Nullwerten suchen:

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

Mithilfe von ReferenceEquals prüft die Überladung, ob beide Operanden leer sind, bevor sie mit dem Gleichheitsvergleich fortfährt. Dies verhindert eine unendliche Rekursion und stellt das korrekte Verhalten im Nullfall sicher.

Das obige ist der detaillierte Inhalt vonWie kann eine unendliche Rekursion bei der Operatorüberladung beim Umgang mit Nullen verhindert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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