为什么 C 编译器不自动生成比较运算符
尽管编译器能够提供默认构造函数和赋值运算符等基本方法,但它值得注意的是,省略了定义比较运算符,例如operator==和operator!=。这种遗漏提出了一个问题:为什么?
一个论点表明,如果编译器可以生成默认的复制构造函数,它也应该能够提供默认的运算符 ==()。然而,不这样做的决定可能源于 C 的创建者 Bjarne Stroustrup 不愿意包含默认的复制机制。
Stroustrup 在他的《C 的设计与演变》一书中表达了他的反对意见默认复制操作,指出他经常禁止在自己的类中进行复制。这种不情愿源于默认复制构造函数继承自 C 并且经常被滥用。
因此,与其质疑为什么 C 缺少默认运算符 ==(),不如考虑为什么它包括默认赋值和复制构造函数。这个决定是出于与 C 的向后兼容性,这在 C 的发展过程中既是一种祝福,也是一种令人不情愿的妥协。
对于那些喜欢阻止默认复制操作的人,声明私有赋值运算符和复制构造函数在他们的 IDE 片段中可能是一种有用的做法。这允许在需要时显式删除这些声明,确保更好地控制类行为。
以上是为什么 C 编译器不自动生成比较运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!