c++ - C++20 宇宙飞船运算符的性能问题?

标签 c++ performance comparison c++20 spaceship-operator

自 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 == ba != b没有打电话 operator <=> , 他们调用 operator==operator != .您描述的行为是后来修订的 C++20 标准的临时版本。

链接的更改请求恰好给出了 std::vector例如 ==可以比 <=> 更有效地进行比较.

关于c++ - C++20 宇宙飞船运算符的性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65781922/

相关文章:

c++ - 访问不同类别的成员

mysql - mysql 分区表上的索引

c++ - 如何从字符串中每行输出一个单词

c++ - 错误 C2280 : attempting to reference a deleted function (unique_ptr)

java - Java SWT Widget 会影响线程性能吗?

c# - 尽可能最快的绘图、笔分配和 if 语句

mysql - MySQL 和 Oracle DB 之间的差异

Java Hashmap 迭代 : Look at two values at once?

c++ - 比较两个整数而不进行任何比较

c++ - 有选择地仅对翻译单元的一部分禁用 GCC 警告