C++20 中排序类型的隐含含义

yug*_*ugr 8 c++ language-lawyer spaceship-operator c++20

operator <=>C++20 允许用户在定义:std::partial_orderingstd::weak_ordering时指定不同的返回类型std::strong_ordering。指定它们是否意味着相应的类承诺遵守某些排序公理?例如,对于部分排序,这些将是非自反性、不对称性和传递性

我在 C++20 标准中找不到任何提及这一点的内容。

Bar*_*rry 9

是的,这绝对是类别的目的。

所有的顺序都应该是非自反的、不对称的和传递的。weak_ordering并且strong_ordering应该是总订单。strong_ordering暗示着可替代性(即a == b暗示,对于这个问题有意义的f(a) == f(b)一组函数- 例如不是一个这样的函数)。fstd::addressof

这不在 C++ 标准中,因为它实际上不是语言规则的问题 - 这是作为程序员应该做什么或不应该做什么的问题。就像如果您声明operator<=>returns strong_ordering,它绝对应该是满足可替代性的有效顺序 - 但这最多只是一个注释,并且在文档的其余部分中会感觉不合适。

但您可以阅读更多原始订购文件以了解意图,例如P0100P0515

  • @yugr 这些算法对 `&lt;` 的行为有要求,但是 _language_ 没有说明 `bool operator&lt;(T, T)` 的含义。我们还没有任何三向比较算法 - 当我们添加这些算法时,您将在该部分看到类似的语言。 (2认同)