为什么 C 编译器避免生成默认比较运算符?
虽然 C 编译器提供默认构造函数、复制构造函数、析构函数和赋值运算符,他们故意排除比较运算符,例如operator==和operator!=。这一设计决策源于 C 语言创建者 Bjarne Stroustrup 对自动生成的复制操作的潜在陷阱的担忧。
Stroustrup 在《C 的设计与演变》中表达了他的保留意见,表示他认为默认的复制操作是不受欢迎的,并积极阻止它们在他的许多课程中使用。这种不情愿源于 C 继承自 C,其中经常使用默认的复制构造函数和赋值运算符。然而,当应用于具有复杂或微妙内部结构的类时,这些默认操作可能会导致意外的行为。
在没有默认比较运算符的情况下,编译器强制要求对operator==和operator!=进行显式定义。这可确保开发人员彻底考虑类比较的含义,并定义准确反映其预期行为的自定义运算符。这种方法鼓励开发人员就类比较做出明智的决定,而不是依赖隐式或可能错误的编译器生成的代码。
以上是为什么 C 编译器不生成默认比较运算符(运算符 == 和运算符!=)?的详细内容。更多信息请关注PHP中文网其他相关文章!