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