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

Comment empêcher une récursivité infinie lors de la surcharge de l'opérateur == avec des valeurs nulles ?

DDD
Libérer: 2025-01-08 16:07:41
original
725 Les gens l'ont consulté

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

Gestion des valeurs nulles lors de la surcharge de l'opérateur ==

Dans certains cas, essayer de surcharger l'opérateur == avec le code suivant peut entraîner une récursivité infinie :

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

Le problème est que sans vérification spécifique des valeurs nulles, la comparaison == appelle récursivement la méthode surchargée de l'opérateur == pour comparer foo1 et foo2. Puisque foo1 est vide, une boucle récursive est déclenchée.

Pour résoudre ce problème, vous pouvez utiliser ReferenceEquals pour ajouter une vérification de valeur nulle :

<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 pour vérifier les valeurs nulles, vous vous assurez que la méthode surchargée de l'opérateur == ne se reproduit pas indéfiniment, permettant ainsi de gérer les comparaisons nulles avec élégance.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal