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