首页 >后端开发 >C++ >为什么 C 编译器不自动生成比较运算符?

为什么 C 编译器不自动生成比较运算符?

Patricia Arquette
Patricia Arquette原创
2024-11-29 04:06:17419浏览

Why Don't C   Compilers Automatically Generate Comparison Operators?

为什么 C 编译器不自动生成比较运算符

尽管编译器能够提供默认构造函数和赋值运算符等基本方法,但它值得注意的是,省略了定义比较运算符,例如operator==和operator!=。这种遗漏提出了一个问题:为什么?

一个论点表明,如果编译器可以生成默认的复制构造函数,它也应该能够提供默认的运算符 ==()。然而,不这样做的决定可能源于 C 的创建者 Bjarne Stroustrup 不愿意包含默认的复制机制。

Stroustrup 在他的《C 的设计与演变》一书中表达了他的反对意见默认复制操作,指出他经常禁止在自己的类中进行复制。这种不情愿源于默认复制构造函数继承自 C 并且经常被滥用。

因此,与其质疑为什么 C 缺少默认运算符 ==(),不如考虑为什么它包括默认赋值和复制构造函数。这个决定是出于与 C 的向后兼容性,这在 C 的发展过程中既是一种祝福,也是一种令人不情愿的妥协。

对于那些喜欢阻止默认复制操作的人,声明私有赋值运算符和复制构造函数在他们的 IDE 片段中可能是一种有用的做法。这允许在需要时显式删除这些声明,确保更好地控制类行为。

以上是为什么 C 编译器不自动生成比较运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn