Maison > développement back-end > C++ > Pourquoi l'opérateur de vaisseau spatial non par défaut ne génère-t-il pas `==` et `!=` dans C 20 ?

Pourquoi l'opérateur de vaisseau spatial non par défaut ne génère-t-il pas `==` et `!=` dans C 20 ?

Linda Hamilton
Libérer: 2024-11-07 22:13:03
original
358 Les gens l'ont consulté

Why Doesn't the Non-defaulted Spaceship Operator Generate `==` and `!=` in C  20?

Pourquoi l'opérateur de vaisseau spatial non par défaut ne génère pas == et !=

Lors de l'utilisation du nouvel opérateur de vaisseau spatial (<=>) dans C 20, il est crucial de noter les implications de l'implémentation d'un opérateur personnalisé par rapport à l'implémentation par défaut.

Dans le premier exemple, vous utilisez l'opérateur par défaut<=> implémentation fournie par le langage. Cette implémentation par défaut permet au compilateur de générer automatiquement un opérateur ==. Cependant, lorsque vous implémentez un opérateur personnalisé<=> fonction, le compilateur ne peut plus générer implicitement un opérateur == correspondant.

Ce comportement est intentionnel, comme indiqué dans le standard C ([class.compare.default](https://en.cppreference.com /w/cpp/lingual/comparison#Class_comparison)) :

If the class definition does not explicitly declare an == operator function, but declares a defaulted three-way comparison operator function, an == operator function is declared implicitly with the same access as the three-way comparison operator function.
Copier après la connexion

La raison derrière ce choix de conception est d'empêcher la génération implicite de == dans des situations où ce n'est peut-être pas le moyen le plus efficace de déterminer égalité. Par exemple, des classes comme std::vector ne doivent pas utiliser un <=> pour les tests d'égalité, car comparer d'abord les tailles est plus efficace.

Dans un modèle <=> implémentation, la classe peut également effectuer des opérations spécialisées qui nécessitent une implémentation personnalisée pour ==. Par conséquent, au lieu de générer une implémentation par défaut potentiellement non optimale, le langage laisse au programmeur le soin de définir explicitement 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!

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