Nic*_*las 19 c++ c++-concepts c++20
该概念equality_comparable_with<T, U>旨在声明类型T和 的对象U可以相互比较,如果它们是,则这具有预期的含义。没关系。
但是,这个概念也需要common_reference_t<T&, U&>存在。其主要推动力common_reference及其伴随的功能似乎是启用代理迭代器,有一个地方来表示此类迭代器之间的关系reference以及value_type此类迭代器的关系。
太好了,但是……这与测试 aT和 a 是否U可以相等有什么关系?为什么标准要求这样做T并且U有一个共同的参考关系只是为了让你比较它们相等?
这会产生奇怪的情况,其中很难有两种类型没有合理地具有逻辑可比性的公共引用关系。例如,vector<int>和pmr::vector<int>逻辑上应该是可比的。但它们不可能,因为这两种不相关的类型之间没有合理的公共引用。
这可以追溯到Palo Alto 报告§3.3 和 D.2。
为了使交叉类型概念在数学上合理,您需要定义交叉类型比较的含义。对于equality_comparable_with,t == u通常意味着t和u相等,但是不同类型的两个值相等意味着什么?该设计表示跨类型相等是通过将它们映射到公共(引用)类型来定义的(需要这种转换来保留值)。
当 的强公理equality_comparable_with不可取时,标准使用仅说明的概念weakly-equality-comparable-with,并且该概念不需要公共参考。然而,它是一种“语义上的可憎”(用凯西卡特的话来说)并且只是出于这个原因的说明:它允许拥有t == u和t2 == u但是t != t2(这实际上是哨兵所必需的)。
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |