首页 > 后端开发 > C++ > 为什么非默认的 Spaceship 运算符在 C 20 中不生成 `==` 和 `!=`?

为什么非默认的 Spaceship 运算符在 C 20 中不生成 `==` 和 `!=`?

Linda Hamilton
发布: 2024-11-07 22:13:03
原创
296 人浏览过

Why Doesn't the Non-defaulted Spaceship Operator Generate `==` and `!=` in C  20?

为什么非默认的 Spaceship 运算符不生成 == 和 !=

在 C 20 中使用新的 spaceship 运算符 () 时,重要的是要注意实现自定义运算符与依赖默认实现的含义。

在第一个示例中,您使用的是默认运算符;语言提供的实现。此默认实现允许编译器自动生成 == 运算符。但是,当您实现自定义运算符时函数时,编译器无法再隐式生成相应的 == 运算符。

这种行为是有意为之,如 C 标准中所述 ([class.compare.default](https://en.cppreference.com /w/cpp/language/comparison#Class_comparison)):

If the class definition does not explicitly declare an == operator function, but declares a defaulted three-way comparison operator function, an == operator function is declared implicitly with the same access as the three-way comparison operator function.
登录后复制

这种设计选择背后的原因是为了防止在可能不是最有效的确定方法的情况下隐式生成 ==平等。例如,像 std::vector 这样的类不应使用非默认的 。用于相等测试,因为首先比较大小更有效。

在自定义 中实现时,该类可能正在执行专门的操作,这些操作也需要 == 的自定义实现。因此,该语言不会生成潜在的非最佳默认实现,而是让程序员明确定义 == 运算符。

以上是为什么非默认的 Spaceship 运算符在 C 20 中不生成 `==` 和 `!=`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板