从 C++20 开始,标准库使用spaceship 运算符来实现字符串和向量的比较(根据此视频)。我担心这会带来潜在的巨大性能损失!
让我解释一下运算符的!=
示例string
:
- 当我编写
str1 != str2
时,编译器现在将其转换为(str1 <=> str2) != 0
. - 然而,一个有效的
!=
for实现string
将首先检查 forstr1.size() != str2.size()
,并且只有在失败时才转移到比较实际字符。 - 这种优化无法为 spaceship 运算符实现,因为无论如何它都必须确定“更大”的字符串。
因此,如果这确实是现在比较字符串的不等式,这不是巨大的性能损失吗?