Heim > Backend-Entwicklung > C++ > Wie kann eine unendliche Rekursion verhindert werden, wenn der ==-Operator mit Nullwerten überladen wird?

Wie kann eine unendliche Rekursion verhindert werden, wenn der ==-Operator mit Nullwerten überladen wird?

DDD
Freigeben: 2025-01-08 16:07:41
Original
725 Leute haben es durchsucht

How to Prevent Infinite Recursion When Overloading the == Operator with Null Values?

Verarbeitung von Nullwerten beim Überladen des ==-Operators

In einigen Fällen kann der Versuch, den ==-Operator mit dem folgenden Code zu überladen, zu einer unendlichen Rekursion führen:

<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);

public static bool operator ==(Foo foo1, Foo foo2) {
    return foo1 == null ? foo2 == null : foo1.Equals(foo2);
}</code>
Nach dem Login kopieren

Das Problem besteht darin, dass der ==-Vergleich ohne spezifische Nullprüfung rekursiv die überladene Methode ==-Operator aufruft, um foo1 und foo2 zu vergleichen. Da foo1 leer ist, wird eine rekursive Schleife ausgelöst.

Um dieses Problem zu lösen, können Sie mit ReferenceEquals eine Nullwertprüfung hinzufügen:

<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

Indem Sie ReferenceEquals verwenden, um nach Nullwerten zu suchen, stellen Sie sicher, dass die mit dem ==-Operator überladene Methode nicht endlos wiederholt wird, sodass Nullvergleiche ordnungsgemäß gehandhabt werden können.

Das obige ist der detaillierte Inhalt vonWie kann eine unendliche Rekursion verhindert werden, wenn der ==-Operator mit Nullwerten überladen wird?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage