M. *_*ter 2 c++ comparison performance spaceship-operator c++20
从 C++20 开始,标准库使用spaceship 运算符来实现字符串和向量的比较(根据此视频)。我担心这会带来潜在的巨大性能损失!
让我对运营商的例子解释!=为string:
str1 != str2,编译器现在将其转换为(str1 <=> str2) != 0.!=for的有效实现string将首先检查 for str1.size() != str2.size(),并且只有在失败时才转移到比较实际字符。因此,如果这真的是现在比较字符串的不等式,这不是一个巨大的性能损失吗?
标准化委员会已经在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1185r2.html 中解决了这个问题。该更改表示a ==b 和a != b不调用operator <=>,它们调用operator==and operator !=。您描述的行为是后来修订的 C++20 标准的临时版本。
链接的更改请求正好std::vector作为一个示例,其中==可以比<=>.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |