patterncppMajor
Why don't C++ compilers define operator== and operator!=?
Viewed 0 times
operatordefinewhyanddoncompilers
Problem
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':
But it cannot seem to give you any comparison operators - such as
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?
- 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?
Solution
The compiler wouldn't know whether you wanted a pointer comparison or a deep (internal) comparison.
It's safer to just not implement it and let the programmer do that themselves. Then they can make all the assumptions they like.
It's safer to just not implement it and let the programmer do that themselves. Then they can make all the assumptions they like.
Context
Stack Overflow Q#217911, score: 83
Revisions (0)
No revisions yet.