[英]Why do empty structs in C++20 do not have implicit spaceship operator?
[英]Performance problems with the C++20 spaceship operator?
从 C++20 开始,标准库使用spaceship 运算符来实现字符串和向量的比较(根据此视频)。 我担心这会带来潜在的巨大性能损失!
让我解释一下运算符!=
for string
的示例:
str1 != str2
时,编译器现在将其转换为(str1 <=> str2) != 0
。!=
for string
的有效实现将首先检查str1.size().= str2.size()
,并且仅在失败时才转移到比较实际字符。因此,如果这确实是现在比较字符串的不等式,这不是巨大的性能损失吗?
标准化委员会已经在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.