C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- std::common_reference_with
- std::convertible_to
- std::same_as
- std::derived_from
- std::common_with
- std::integral
- std::signed_integral
- std::unsigned_integral
- std::floating_point
- std::swappable, std::swappable_with
- std::destructible
- std::constructible_from
- std::default_initializable
- std::move_constructible
- std::copy_constructible
- std::assignable_from
- std::equality_comparable, std::equality_comparable_with
- std::totally_ordered, std::totally_ordered_with
- std::movable
- std::copyable
- std::semiregular
- std::regular
- std::invocable, std::regular_invocable
- std::predicate
- std::relation
- std::equivalence_relation
- std::strict_weak_order
- boolean-testable
- 注é
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >æ¦å¿µåº (C++20) > std::equality_comparable, std::equality_comparable_with
std::equality_comparable, std::equality_comparable_with
| å®ä¹äºå¤´æä»¶ <concepts>
|
||
| template<class T, class U> Â concept __WeaklyEqualityComparableWith = // ä»
为解é |
(1) | |
| template < class T > concept equality_comparable = __WeaklyEqualityComparableWith<T, T>; |
(2) | (C++20 èµ·) |
| template <class T, class U> concept equality_comparable_with = |
(3) | (C++20 èµ·) |
__WeaklyEqualityComparableWith<T, U> æå® T ç±»å对象å U ç±»å对象è½ç¨ == å != å½¼æ¤æ¯è¾ç¸çï¼ä»¥ä»»ä¸é¡ºåºï¼ï¼èæ¯è¾ç»æä¸è´ãequality_comparable<T> æå®æ¯è¾è¿ç®ç¬¦ == å != å¨ T ä¸åæ ç¸çæ§ï¼ == è¥ä¸å¯è¥è¿ç®æ°ç¸çæçæ true ãequality_comparable_with<T, U> æå®æ¯è¾è¿ç®ç¬¦ == å != å¨ï¼å¯è½æ··åçï¼ T å U è¿ç®æ°ä¸çæä¸ç¸çä¸è´çç»æãæ¯è¾æ··åçè¿ç®æ°äº§ççç»æçä»·äºæ¯è¾è½¬æ¢å°å
¶å
±ç¨ç±»åçè¿ç®æ°ãè¯ä¹è¦æ±
__WeaklyEqualityComparableWith<T, U> ä»
è¥ç¬¦åä¸åæ¡ä»¶æå¾å°å®ç°ãç»å®
-
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) ã
equality_comparable<T> ä»
è¥ç¬¦åä¸åæ¡ä»¶æå¾å°å®ç°ãç»å® T ç±»å对象 a å b ï¼ bool(a == b) è¥ä¸å¯è¥ a å b ç¸çæä¸º true ãå a == b ä¿æç¸çæ§çè¦æ±ï¼è¿éå« == 为对称ä¸ä¼ éï¼èä¸ == è¿è对ææè³å°çäºä¸ä¸ªå
¶ä»å¯¹è±¡ç a èªåãequality_comparable_with<T, U> ä»
è¥ç¬¦åä¸åæ¡ä»¶æå¾å°å®ç°ï¼ç»å®ä»»ä½ const std::remove_reference_t<T> ç±»åå·¦å¼ t åä»»ä½ const std::remove_reference_t<U> ç±»åå·¦å¼ u ï¼å¹¶ä»¤ C 为 std::common_reference_t<const std::remove_reference_t<T>&, const std::remove_reference_t<U>&> ï¼å bool(t == u) == bool(C(t) == C(u)) ãç¸çæ§ä¿æ
è¥è¡¨è¾¾å¼å¯¹ç»å®çç¸çè¾å ¥äº§çç¸çè¾åºï¼åå®ä¿æç¸çæ§ã
- 表达å¼çè¾å ¥ç±å ¶è¿ç®æ°ç»æã
- 表达å¼çè¾åºç±å ¶ç»æåè¡¨è¾¾å¼æä¿®æ¹çææè¿ç®æ°ï¼è¥åå¨ï¼ç»æã
è¿ä¸æ¥è¦æ±æ¯ä¸ªè¦æ±ä¿æç¸çæ§ç表达å¼é½ç¨³å®ï¼è¿ç§è¡¨è¾¾å¼å¸¦ç¸åè¾å ¥å¯¹è±¡çäºæ¬¡æ±å¼å¿ é¡»æ¥æç¸ççè¾åºï¼èæ ä»»ä½å¯¹è¿äºè¾å ¥å¯¹è±¡çæ¾å¼ä¸é´ä¿®æ¹ã
é¤éå¦å¤æéï¼æ¯ä¸ªç¨äº requires 表达å¼ä¸ç表达å¼é½è¦æ±ä¿æç¸çæ§ä¸ç¨³å®ï¼è表达å¼çæ±å¼å¿ é¡»åªä¿®æ¹å ¶é常è¿ç®æ°ãå¿ é¡»ä¸ä¿®æ¹å¸¸è¿ç®æ°ã
éå¼è¡¨è¾¾å¼åç§
使ç¨ä¸ä¿®æ¹æ const å·¦å¼è¿ç®æ°ç表达å¼ç requires 表达å¼äº¦éå¼è¦æ±è¯¥è¡¨è¾¾å¼çé¢å¤åç§å¯¹ç»å®è¿ç®æ°æ¥åé const 左弿ï¼å¯ä¸º const çï¼å³å¼ï¼é¤é以æåºå«çè¯ä¹æ¾å¼è¦æ±è¿ç§è¡¨è¾¾å¼åç§ãè¿äºéå¼è¡¨è¾¾å¼åç§å¿ 须符åä¸å£°æç表达å¼çç¸åçè¯ä¹ã䏿å®å®ç°ä»¥ä½ç§ç¨åº¦æ ¡éªåç§çè¯æ³ã