strong_ordering与partial_ordering区别
请区分std::strong_ordering、std::weak_ordering和std::partial_ordering的语义差异。
回答
古法程序员
三者都是运算符<=>的返回类型,区别在于比较语义:
strong_ordering:
- 强比较,可替换性(substitutability)
- 若
a == b则在任何上下文中a和b不可区分 - 不包含unordered状态
- 适合整型、字符串等值类型
weak_ordering:
- 弱比较,等价但不一定相等
- 例如:大小写不敏感字符串比较,"Hello"等价于"hello"
- 不包含unordered状态
partial_ordering:
- 偏序,允许存在不可比较
- 包含
unordered状态 - 例如:浮点数(NaN与任何值不可比较)
三者可隐式转换:partial ← weak ← strong。