首页 > 后端开发 > C++ > 为什么 C 编译器不自动生成相等 (==) 和不等 (!=) 运算符?

为什么 C 编译器不自动生成相等 (==) 和不等 (!=) 运算符?

Susan Sarandon
发布: 2024-12-03 13:58:11
原创
933 人浏览过

Why Don't C   Compilers Automatically Generate Equality (==) and Inequality (!=) Operators?

为什么 C 编译器不自动定义相等和不等运算符

在 C 中,编译器自动提供某些操作的默认实现,包括构造函数、赋值运算符、和析构函数。但是,它不会生成默认的相等 (==) 和不等 (!=) 运算符。

排除的原因

不提供默认相等运算符的决定源于与成员之间的比较相关的潜在问题。如果类处理内存分配或包含复杂的数据结构,默认比较可能会导致意外结果或错误行为。

Stroustrup 的观点

C 语言创建者 Bjarne Stroustrup ,表达了对自动默认复制构造函数的担忧。他认为复制应该由程序员显式控制,并且他不鼓励将其用于特定对象类型。

程序员的后果

编译器生成的相等运算符的缺失意味着程序员必须为其类编写自定义比较函数。此额外责任可确保正确比较复杂的类,而不会影响数据完整性。

示例

考虑以下类:

class Foo {
public:
    std::string str_;
    int n_;
};
登录后复制

进行比较此类的对象,程序员必须实现相等性运算符:

bool operator==(const Foo& f1, const Foo& f2) {
    return (f1.str_ == f2.str_ && f1.n_ == f2.n_);
}
登录后复制

结论

C 编译器不会自动定义相等和不等运算符来防止潜在错误并保持对对象比较的控制。程序员必须为复杂的类定义自定义比较函数,以确保类实例的比较准确可靠。

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

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