cppreference中std::partial_ordering的措辞矛盾问题咨询
关于std::partial_ordering比较规则的疑问解答
你的理解是正确的,这段描述不存在矛盾,问题出在原文措辞的范围限定不够明确。
尝试将partial_ordering与整数字面量0以外的任何值进行比较的程序,其行为是未定义的
这句话的约束仅针对std::partial_ordering实例与整数的比较场景,完全不涉及两个std::partial_ordering实例之间的比较操作:
- 禁止的是这类操作:比如
std::partial_ordering::less == 1、std::partial_ordering::greater < -5,也就是把排序结果和非0的整数值做比较,这类行为是未定义的; - 而两个
std::partial_ordering实例之间的相等/不等比较(比如std::partial_ordering::equivalent == std::partial_ordering::equivalent、std::partial_ordering::less != std::partial_ordering::greater)是标准明确允许的,文档后续说明的相等运算符就是专门针对这种场景设计的。
之所以会产生误解,是因为原文没有明确限定“比较”的另一个操作数类型,但结合C++标准的设计意图和上下文来看,这个规则的边界非常清晰:只限制和非0整数的跨类型比较,同类型实例间的比较完全合法。
内容的提问来源于stack exchange,提问作者Wutz
相关产品推荐
相关产品推荐

