【发布时间】:2018-09-14 14:46:15
【问题描述】:
为什么我们在 C++ 中需要这样的运算符,它在现代 C++ 编程中有何用处?任何可以应用的真实世界代码示例都会有所帮助。
这个问题旨在了解现实世界中的实际应用,而无需阅读 Herb Sutter 的冗长建议。不过这个提议并没有冒犯。
【问题讨论】:
标签: c++ c++20 spaceship-operator
为什么我们在 C++ 中需要这样的运算符,它在现代 C++ 编程中有何用处?任何可以应用的真实世界代码示例都会有所帮助。
这个问题旨在了解现实世界中的实际应用,而无需阅读 Herb Sutter 的冗长建议。不过这个提议并没有冒犯。
【问题讨论】:
标签: c++ c++20 spaceship-operator
我想给你三点动力:
>、>=、==、<=、<。使用<=>(宇宙飞船),您可以以完全通用的方式实现这些其他操作。strcmp() 函数。所以 - 对于字典顺序检查很有用,例如向量或列表或其他有序容器中的数据。x86 或x86_64 比较a 和b (CMP RAX, RBX) 基本上就像减法(SUB RAX, RBX),除了RAX 实际上并没有改变,只有标志受到影响,因此您可以使用“在等于/不等于/大于/小于/等上跳转”。 (JE/JNE/JGT/JLT 等)作为下一条指令。 CMP 应该被视为“宇宙飞船比较”。【讨论】:
compare。
compare 函数变得不那么真实。 operator<=> 的优点是没有现有的函数可以与之冲突。
= default 比较生成将是不可能的。如果没有 that,则无法将用户定义的类型放入模板参数(为 C++20 添加的东西)。这与右值引用没有什么不同;您本可以制作了某种标准库类型,语言功能可以使用这种类型,但是我们无法使用它来修复转发。