我非常喜欢让编译器为你做尽可能多的工作。在编写一个简单的类时,编译器可以“免费”为您提供以下内容:
- 默认(空)构造函数
- 复制构造函数
- 一个析构函数
- 赋值运算符 (
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
{ }
这有充分的理由吗?为什么执行逐个成员的比较会成为问题?显然,如果该类分配内存,那么您要小心,但是对于一个简单的类,编译器肯定可以为您做到这一点吗?