使用 C++20 宇宙飞船运算符进行相等/不等比较时存在性能问题?

问题描述 投票:0回答:1

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

让我解释一下

!=
的运算符
string
的示例:

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

如果这确实是现在比较字符串不等式的方式,那么这不是一个巨大的性能损失吗?

c++ performance comparison c++20 spaceship-operator
1个回答
8
投票

标准化委员会已在 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1185r2.html 中解决了这个问题。这一变化表明

a == b
a != b
没有调用
operator <=>
,而是调用
operator==
operator !=
。您描述的行为是 C++20 标准的临时版本,后来进行了修订。

链接的更改请求准确地给出了

std::vector
作为示例,其中
==
可以比
<=>
更有效地进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.