繁体   English   中英

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

[英]Performance problems with the C++20 spaceship operator?

从 C++20 开始,标准库使用spaceship 运算符来实现字符串和向量的比较(根据此视频)。 我担心这会带来潜在的巨大性能损失!

让我解释一下运算符!= for string的示例:

  • 当我写str1 != str2时,编译器现在将其转换为(str1 <=> str2) != 0
  • 但是, != for string的有效实现将首先检查str1.size().= str2.size() ,并且仅在失败时才转移到比较实际字符。
  • 这种优化无法为 spaceship 运算符实现,因为无论如何它都必须确定“更大”的字符串。

因此,如果这确实是现在比较字符串的不等式,这不是巨大的性能损失吗?

标准化委员会已经在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1185r2.html中解决了这个问题。 该更改表明a == b 和a != b没有调用operator <=> ,而是调用operator==operator != 您描述的行为是后来修订的 C++20 标准的临时版本。

链接的更改请求恰好以std::vector为例,其中==可以比<=>更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM