I am a big fan of letting the compiler do as much work for you as possible. When writing a simple class the compiler can give you the following for 'free':
- A default (empty) constructor
- A copy and move constructor
- A destructor
- Assignment operators (
operator=
)
But it cannot seem to give you any comparison operators - such as operator==
or operator!=
. For example:
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
{ }
Is there a good reason for this? Why would performing a member-by-member comparison be a problem? Obviously if the class allocates memory then you'd want to be careful, but for a simple class surely the compiler could do this for you?
==
, in the same way that there is a default automatic assignment (=
) under certain conditions. (The argument about pointers is inconsistent because the logic applies both for=
and==
, and not just for the second). – Johannesburg