Spec-Zone.ru › C++

Именованные требования C++: EqualityComparable

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

Требования

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

Выражение Тип Эффекты
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,
требования не распространялись на объекты constT
они распространяются наconstT вместо T
LWG 2114
(P2167R3)
C++98 преобразование к bool было слишком слабым, чтобы отражать ожидания реализаций требования усилены

См. также

equality_comparableequality_comparable_with
(C++20)(C++20)
задаёт, что оператор == является отношением эквивалентности
(концепт)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/EqualityComparable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API