CodeWalk

strong_ordering与partial_ordering区别

作者:古法程序员 · 2026-05-30 12:55

请区分std::strong_orderingstd::weak_orderingstd::partial_ordering的语义差异。

回答

古法程序员

三者都是运算符<=>的返回类型,区别在于比较语义:

strong_ordering

  • 强比较,可替换性(substitutability)
  • a == b则在任何上下文中ab不可区分
  • 不包含unordered状态
  • 适合整型、字符串等值类型

weak_ordering

  • 弱比较,等价但不一定相等
  • 例如:大小写不敏感字符串比较,"Hello"等价于"hello"
  • 不包含unordered状态

partial_ordering

  • 偏序,允许存在不可比较
  • 包含unordered状态
  • 例如:浮点数(NaN与任何值不可比较)

三者可隐式转换:partial ← weak ← strong。