Maison > développement back-end > C++ > Comment éviter une récursion infinie dans la surcharge des opérateurs lors de la gestion des valeurs nulles ?

Comment éviter une récursion infinie dans la surcharge des opérateurs lors de la gestion des valeurs nulles ?

Mary-Kate Olsen
Libérer: 2025-01-08 16:12:44
original
262 Les gens l'ont consulté

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

Comment éviter la récursion infinie lors du traitement de valeurs nulles lors d'une surcharge d'opérateur ?

Lors de la définition de surcharges d'opérateurs de comparaison, il est crucial de gérer correctement les cas nuls pour éviter une récursion infinie. Le code suivant démontre le problème de récursion infinie lors de la surcharge de l'opérateur == :

<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>
Copier après la connexion

Dans ce scénario, la surcharge de l'opérateur == s'appelle de manière récursive lorsqu'un de ses opérandes est vide. Pour éviter ce problème, vous devez vérifier explicitement les valeurs nulles à l'aide de la méthode 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>
Copier après la connexion

En utilisant ReferenceEquals, la surcharge vérifie si les deux opérandes sont vides avant de procéder à la comparaison d'égalité. Cela empêche une récursion infinie et garantit un comportement correct dans le cas nul.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal