在 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中文网其他相关文章!