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
296 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!

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