自 C++20 起,标准库使用宇宙飞船运算符 来实现字符串和 vector 的比较(根据 this video )。我担心这会带来潜在的巨大性能损失!
让我解释一下运算符!=
的例子对于 string
:
- 当我写
str1 != str2
,编译器现在将其转换为(str1 <=> str2) != 0
. - 但是,
!=
的有效实现对于string
会先检查str1.size() != str2.size()
, 并且只有在失败时才会移动到比较实际字符。 - 无法为飞船运算符(operator)实现此优化,因为无论如何它都必须确定“更大”的字符串。
因此,如果这确实是现在比较字符串不等式的方式,这不是一个巨大的性能损失吗?
最佳答案
标准化委员会已在 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1185r2.html 中解决了这个问题.该更改表示 a == b
和 a != b
没有打电话 operator <=>
, 他们调用 operator==
和 operator !=
.您描述的行为是后来修订的 C++20 标准的临时版本。
链接的更改请求恰好给出了 std::vector
例如 ==
可以比 <=>
更有效地进行比较.
关于c++ - C++20 宇宙飞船运算符的性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65781922/