Оператор сравнения космического корабля в C++

Зачем нам нужен такой оператор в C++ и как он полезен в современном программировании на C++? Любые примеры кода реального мира, где это можно применить, помогут.

Этот вопрос направлен на то, чтобы понять практическое применение в реальном мире, не читая многословного предложения Херба Саттера. Без обид на предложение, хотя.

1 ответ

Решение

Я дам вам три очка мотивации, чуть выше моей головы:

  1. Это общее обобщение всех других операторов сравнения (для полностью упорядоченных доменов): >, >=, ==, <=, <. Используя <=> (космический корабль), вы можете реализовать каждую из этих других операций совершенно общим способом.
  2. Это невероятно полезно для строк: для этого конкретного случая это старый добрый strcmp() из стандартной библиотеки C. Так что - полезно для всего с лексикографическим порядком, например, для вещей в векторах или других заказанных контейнерах
  3. Что касается целых чисел, это то, что аппаратное обеспечение делает в любом случае: на x86 или x86_64 Сравнение a и b (CMP RAX, RBX) в основном похоже на вычитание (SUB RAX, RBX), за исключением того, что RAX фактически не изменяется, затрагиваются только флаги, так что вы можете использовать "перейти на равный / не равный / больше чем / меньше чем /etc." (JE/JNE/JGT/JLT и т. Д.) В качестве следующей инструкции. CMP следует рассматривать как "сравнение космического корабля".
Другие вопросы по тегам