std::equality_comparable, std::equality_comparable_with
定義於標頭檔案 <concepts> |
||
template< class T > concept equality_comparable = __WeaklyEqualityComparableWith<T, T>; |
(1) | (C++20 起) |
template< class T, class U > concept equality_comparable_with = |
(2) | (C++20 起) |
輔助概念 |
||
template< class T, class U > concept __WeaklyEqualityComparableWith = |
(3) | (僅作說明*) |
(4) | ||
template< class T, class U > concept __ComparisonCommonTypeWith = |
(直至 C++23) (僅作說明*) |
|
template< class T, class U, class C = std::common_reference_t<const T&, const U&> > concept _ComparisonCommonTypeWithImpl = |
(C++23 起) (僅作說明*) |
|
std::equality_comparable
指定型別 T
上的比較運算子 ==
和 !=
反映相等性:當且僅當運算元相等時,==
返回 true。std::equality_comparable_with
指定(可能是混合的)T
和 U
運算元上的比較運算子 ==
和 !=
產生與相等性一致的結果。比較混合運算元產生的結果等同於將運算元轉換為其共同型別後進行比較。__WeaklyEqualityComparableWith
指定型別 T
的物件和型別 U
的物件可以相互(按任意順序)使用 ==
和 !=
進行相等性比較,並且比較結果是一致的。__ComparisonCommonTypeWith
指定兩種型別共享一個共同型別,並且任一型別的 const 左值 或非 const 右值(C++23 起) 可轉換為該共同型別。目錄 |
[編輯] 語義要求
這些概念只有在它們自身滿足並且它們所包含的所有概念都滿足時才被建模。
在以下段落中,給定表示式 E
和型別 C
,CONVERT_TO<C>(E) 定義為
|
(直至 C++23) |
|
(C++23 起) |
T
的物件 a
和 b
,當且僅當 a
和 b
相等時,bool(a == b) 為 true。結合 a == b 是保持相等的要求,這意味著 ==
是對稱和傳遞的,並且對於所有至少與一個其他物件相等的物件 a
來說,==
是自反的。-
t
和t2
為分別表示型別 const std::remove_reference_t<T> 和 std::remove_cvref_t<T> 的不同相等物件的左值, -
u
和u2
為分別表示型別 const std::remove_reference_t<U> 和 std::remove_cvref_t<U> 的不同相等物件的左值, -
C
為 std::common_reference_t<const std::remove_reference_t<T>&, const std::remove_reference_t<U>&>,
以下表達式為真:
- bool(t == u) == bool(CONVERT_TO<C>(t2) == CONVERT_TO<C>(u2)).
-
t
,型別為 const std::remove_reference_t<T> 的左值,以及 -
u
,型別為 const std::remove_reference_t<U> 的左值,
以下為真:
- t == u、u == t、t != u、u != t 具有相同的域;
- bool(u == t) == bool(t == u);
- bool(t != u) == !bool(t == u);以及
- bool(u != t) == bool(t != u).
對應的 |
(直至 C++23) |
令
以下條件成立:
|
(C++23 起) |
[編輯] 保持相等
標準庫概念的 requires 表示式中宣告的表示式必須是保持相等的(除非另有說明)。
[編輯] 隱式表示式變體
使用對於某個常量左值運算元是非修改性表示式的 requires 表示式也需要隱式表示式變體。
[編輯] 參考
- C++23 標準 (ISO/IEC 14882:2024)
- 18.5.4 Concept
equality_comparable
[concept.equalitycomparable]
- 18.5.4 Concept
- C++20 標準 (ISO/IEC 14882:2020)
- 18.5.3 Concept
equality_comparable
[concept.equalitycomparable]
- 18.5.3 Concept