Namespaces
Variants

C++ named requirements: EqualityComparable

From cppreference.net
C++ named requirements

Тип должен работать с == оператором, и результат должен иметь стандартную семантику.

Содержание

Требования

Тип T удовлетворяет требованиям EqualityComparable , если для данных выражений a , b и c типа T или (since C++11) const T , следующее выражение является корректным и имеет указанные эффекты:

Выражение Тип Эффекты
a == b удовлетворяет BooleanTestable
(до C++20)
Устанавливает отношение эквивалентности , то есть удовлетворяет следующим свойствам:
  • Для всех значений a , a == a возвращает true .
  • Если a == b , то b == a .
  • Если a == b и b == c , то a == c .
моделирует boolean-testable
(начиная с C++20)

Примечания

Для удовлетворения этого требования, типы, не имеющие встроенных операторов сравнения , должны предоставлять пользовательский operator == .

Для типов, которые являются одновременно EqualityComparable и LessThanComparable , стандартная библиотека C++ проводит различие между

  • Равенство , которое является значением выражения a == b и
  • Эквивалентность , которое является значением выражения ! ( a < b ) && ! ( b < a ) .

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 283 C++98 даже если T является EqualityComparable , требования
не применялись к объектам const T
применяются к
const T вместо T
LWG 2114
( P2167R3 )
C++98 конвертируемость в bool была слишком слабой для отражения ожиданий реализаций требования усилены

Смотрите также

определяет, что оператор == является отношением эквивалентности
(концепт)