HiveBrain v1.2.0
Get Started
← Back to all entries
patterncppMajor

Why don't C++ compilers define operator== and operator!=?

Submitted by: @import:stackoverflow-api··
0
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':

  • 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.

Context

Stack Overflow Q#217911, score: 83

Revisions (0)

No revisions yet.