Maison > développement back-end > C++ > Comment éviter une récursivité infinie lors de la surcharge de l'opérateur '==' avec des vérifications nulles ?

Comment éviter une récursivité infinie lors de la surcharge de l'opérateur '==' avec des vérifications nulles ?

Barbara Streisand
Libérer: 2025-01-08 15:56:41
original
352 Les gens l'ont consulté

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

Gérer correctement les vérifications nulles pour éviter une récursion infinie dans les surcharges d'opérateurs '=='

Lors de la surcharge de l'opérateur '==', assurez-vous de gérer correctement les vérifications nulles pour éviter une récursion infinie. L'extrait de code fourni dans la question montre une approche incorrecte :

<code>if (foo1 == null) return foo2 == null;</code>
Copier après la connexion

Cette condition provoque une récursion infinie car le deuxième appel à == tentera à nouveau de vérifier si foo1 est vide, provoquant une boucle infinie.

Code correct

Pour résoudre ce problème et éviter une récursion infinie, utilisez object.ReferenceEquals pour la vérification nulle :

<code>if (object.ReferenceEquals(foo1, null))
    return object.ReferenceEquals(foo2, null);</code>
Copier après la connexion

Cette condition gère correctement le cas où foo1 ou foo2 (ou les deux) est vide. Renvoie vrai si les deux opérandes sont vides ; renvoie faux si un ou les deux opérandes ne sont pas vides.

Correction complète

Le code corrigé ci-dessous intègre cette modification dans la surcharge d'opérateur fournie :

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

Avec ce changement, la surcharge des opérateurs sera capable de gérer correctement les vérifications nulles sans provoquer de récursion infinie.

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