web-dev-qa-db-fra.com

Pourquoi avons-nous besoin de l'opérateur <=> du vaisseau spatial en C ++?

Pourquoi avons-nous besoin d'un tel opérateur en C++ et comment est-il utile dans la programmation C++ moderne? Tout exemple de code du monde réel où cela peut être appliqué sera utile.

Cette question vise à comprendre l'application pratique dans le monde réel sans lire la proposition verbeuse de Herb Sutter. Aucune infraction à la proposition cependant.

16
Ram

Je vais vous donner trois points de motivation, juste du haut de ma tête:

  1. C'est la généralisation commune de tous les autres opérateurs de comparaison (pour les domaines totalement ordonnés): >, >=, ==, <=, <. En utilisant <=> (Vaisseau spatial), vous pouvez implémenter chacune de ces autres opérations de manière complètement générique.
  2. C'est incroyablement utile pour les chaînes: pour ce cas spécifique, c'est le bon vieux strcmp() de la bibliothèque standard C. Donc - utile pour tout ce qui a un ordre lexicographique, comme les données dans des vecteurs ou des listes ou d'autres conteneurs ordonnés.
  3. Pour les nombres entiers, c'est ce que fait le matériel de toute façon: sur x86 Ou x86_64 La comparaison de a et b (CMP RAX, RBX) Revient essentiellement à soustraire (SUB RAX, RBX) Sauf que RAX ne change pas réellement, seuls les drapeaux sont affectés, vous pouvez donc utiliser "sauter sur égal/non égal/supérieur à/inférieur à/etc." (JE/JNE/JGT/JLT etc.) comme instruction suivante. CMP doit être considéré comme une "comparaison de vaisseau spatial".
13
einpoklum