Maison > développement back-end > C++ > le corps du texte

L'utilisation d'un opérateur de vaisseau spatial personnalisé empêche-t-elle la génération d'opérateurs d'égalité en C ?

DDD
Libérer: 2024-11-09 17:56:02
original
771 Les gens l'ont consulté

Does Using a Custom Spaceship Operator Prevent the Generation of Equality Operators in C  ?

L'opérateur de vaisseau spatial et son impact sur l'égalité des opérateurs

L'opérateur de vaisseau spatial <=>, introduit dans le C 20, fournit un aperçu concis syntaxe pour les comparaisons à trois voies. Cependant, les utilisateurs rencontrant un comportement inattendu lorsqu'ils utilisent à la fois l'opérateur de vaisseau spatial et les opérateurs d'égalité (== et !=) peuvent être surpris.

Implémentation par défaut et opérateurs d'égalité générés

Lorsque l'opérateur du vaisseau spatial est déclaré par défaut (par exemple, auto Operator<=>(const X&) const = default;), cela permet au compilateur de générer automatiquement un opérateur == basé sur la comparaison sous-jacente. Ceci est démontré dans l'exemple suivant :

struct X {
    int Dummy = 0;
    auto operator<=>(const X&amp;) const = default;
};

int main() {
    X a, b;

    a == b; // OK!
}
Copier après la connexion

Implémentation personnalisée et opérateurs d'égalité non générés

Cependant, lorsqu'une implémentation personnalisée de l'opérateur de vaisseau spatial est fournie, les opérateurs d'égalité générés ne sont plus disponibles. Cela a été observé dans le contenu de la question, où un opérateur personnalisé<=> l'implémentation a entraîné une erreur lors de l'utilisation de l'opérateur ==.

Raisonnement derrière le comportement

Ce comportement est intentionnel. Le standard C précise que seul un opérateur de vaisseau spatial par défaut déclenche la génération d'un opérateur d'égalité ([class.compare.default](https://eel.is/c draft/class.compare.default)). La raison est que certaines classes, telles que std::vector, peuvent ne pas vouloir utiliser l'opérateur de vaisseau spatial pour les contrôles d'égalité, car ce n'est peut-être pas l'approche la plus efficace.

Conclusion

Ainsi, lors de la définition d'un opérateur de vaisseau spatial personnalisé, il est important de garder à l'esprit qu'il élimine la génération automatique d'opérateurs d'égalité. Si des contrôles d'égalité sont requis, il est recommandé de fournir une définition explicite de l'opérateur ==.

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