首页 > 后端开发 > C++ > 为什么 C 编译器不生成默认比较运算符(运算符 == 和运算符!=)?

为什么 C 编译器不生成默认比较运算符(运算符 == 和运算符!=)?

Mary-Kate Olsen
发布: 2024-11-30 14:38:11
原创
596 人浏览过

Why Don't C   Compilers Generate Default Comparison Operators (operator== and operator!=)?

为什么 C 编译器避免生成默认比较运算符?

虽然 C 编译器提供默认构造函数、复制构造函数、析构函数和赋值运算符,他们故意排除比较运算符,例如operator==和operator!=。这一设计决策源于 C 语言创建者 Bjarne Stroustrup 对自动生成的复制操作的潜在陷阱的担忧。

Stroustrup 在《C 的设计与演变》中表达了他的保留意见,表示他认为默认的复制操作是不受欢迎的,并积极阻止它们在他的许多课程中使用。这种不情愿源于 C 继承自 C,其中经常使用默认的复制构造函数和赋值运算符。然而,当应用于具有复杂或微妙内部结构的类时,这些默认操作可能会导致意外的行为。

在没有默认比较运算符的情况下,编译器强制要求对operator==和operator!=进行显式定义。这可确保开发人员彻底考虑类比较的含义,并定义准确反映其预期行为的自定义运算符。这种方法鼓励开发人员就类比较做出明智的决定,而不是依赖隐式或可能错误的编译器生成的代码。

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

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