Namespaces
Variants

C++ named requirements: EqualityComparable

From cppreference.net
C++ named requirements

Le type doit fonctionner avec l'opérateur == et le résultat doit avoir une sémantique standard.

Table des matières

Exigences

Le type T satisfait EqualityComparable si, étant données les expressions a , b et c de type T ou (depuis C++11) const T , l'expression suivante est valide et a les effets spécifiés :

Expression Type Effets
a == b satisfait BooleanTestable
(jusqu'en C++20)
Établit une relation d'équivalence , c'est-à-dire qu'elle satisfait les propriétés suivantes :
  • Pour toutes les valeurs de a , a == a donne true .
  • Si a == b , alors b == a .
  • Si a == b et b == c , alors a == c .
modélise boolean-testable
(depuis C++20)

Notes

Pour satisfaire cette exigence, les types qui ne disposent pas d'opérateurs de comparaison intégrés doivent fournir un opérateur operator == défini par l'utilisateur.

Pour les types qui sont à la fois EqualityComparable et LessThanComparable , la bibliothèque standard C++ établit une distinction entre

  • Égalité , qui est la valeur de l'expression a == b et
  • Équivalence , qui est la valeur de l'expression ! ( a < b ) && ! ( b < a ) .

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 283 C++98 même si T est EqualityComparable , les exigences
ne s'appliquaient pas aux objets const T
elles s'appliquent à
const T au lieu de T
LWG 2114
( P2167R3 )
C++98 la convertibilité en bool était trop faible pour refléter les attentes des implémentations exigences renforcées

Voir aussi

spécifie que l'opérateur == est une relation d'équivalence
(concept)