为什么我们需要 C++ 中的 spaceship <=> 运算符?

Why do we need the spaceship <=> operator in C++?

为什么我们在 C++ 中需要这样的运算符,它在现代 C++ 编程中有何用处?任何可以应用此方法的真实代码示例都会有所帮助。

这个问题旨在了解现实世界中的实际应用,而无需阅读 Herb Sutter 的冗长提案。虽然没有冒犯这个提议。

我给你三点动力,就在我的脑海里:

  1. 这是所有其他比较运算符的通用概括(对于 totally-ordered 域):>>===<=<。使用 <=>(宇宙飞船),您可以以完全通用的方式实现这些其他操作中的每一个。
  2. 对于字符串,它等同于 C 标准库中的旧 strcmp() 函数。所以 - 对于字典顺序检查很有用,例如向量或列表或其他有序容器中的数据。
  3. 对于整数,这就是硬件所做的:在 x86x86_64 上比较 a 和 b (CMP RAX, RBX) 基本上就像减法 (SUB RAX, RBX)除了 RAX 实际上没有改变,只有标志受到影响,所以你可以使用 "jump on equal/not equal/greater than/lesser than/etc." (JE/JNE/JGT/JLT 等)作为下一条指令。 CMP 应该被认为是 "spaceship compare".