C ++中的太空船比较运算符

时间:2018-04-04 22:07:13

标签: c++ c++20 spaceship-operator

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

这个问题旨在了解现实世界中的实际应用,而无需阅读Herb Sutter的罗嗦提议。但是,对提案没有违法行为。

1 个答案:

答案 0 :(得分:11)

我会给你三点动力,就在我的头顶:

  1. 它是所有其他比较运算符的共同推广(对于完全有序的域):>>===<=,{{ 1}}。使用<(太空船),您可以完全通用的方式实现其他每个操作。
  2. 它对字符串非常有用:对于特​​定情况,它是来自C标准库的好旧<=>。因此 - 对于具有词典顺序的任何内容都很有用,例如向量或列表中的数据或其他有序容器。
  3. 对于整数,它是硬件的作用:在strcmp()x86比较a和b(x86_64)基本上就像减去({{1}除了CMP RAX, RBX实际上没有变化,只有标志受到影响,所以你可以使用&#34;跳转等于/不等于/大于/小于/等。&#34; (JE / JNE / JGT / JLT等)作为下一条指令。 SUB RAX, RBX应被视为&#34;宇宙飞船比较&#34;。