为什么 C++ 编译器不定义 operator== 和 operator!=?

我非常喜欢让编译器为你做尽可能多的工作。在编写一个简单的类时,编译器可以“免费”为您提供以下内容:

  • 默认(空)构造函数
  • 复制构造函数
  • 一个析构函数
  • 赋值运算符 ( operator=)

但它似乎无法为您提供任何比较运算符 - 例如operator==or operator!=。例如:

class foo

{

public:

std::string str_;

int n_;

};

foo f1; // Works

foo f2(f1); // Works

foo f3;

f3 = f2; // Works

if (f3 == f2) // Fails

{ }

if (f3 != f2) // Fails

{ }

这有充分的理由吗?为什么执行逐个成员的比较会成为问题?显然,如果该类分配内存,那么您需要小心,但是对于一个简单的类,编译器肯定可以为您执行此操作吗?

回答:

编译器不知道您是想要指针比较还是深度(内部)比较。

不实现它并让程序员自己做会更安全。然后他们可以做出他们喜欢的所有假设。

以上是 为什么 C++ 编译器不定义 operator== 和 operator!=? 的全部内容, 来源链接: www.h5w3.com/z/754556.html

回到顶部