Я большой поклонник позволить компилятору сделать как можно больше работы для вас. При написании простого класса компилятор может предоставить вам следующее для "free":
- Конструктор по умолчанию (пустой)
- Конструктор копирования
- Деструктор
- Оператор присваивания (
operator=
)
Но он, похоже, не может дать вам никаких операторов сравнения, таких как operator==
или 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
{ }
Есть ли веская причина для этого? Почему выполнение сравнения по каждому члену может быть проблемой? Очевидно, если класс выделяет память, то вы хотите быть осторожным, но для простого класса наверняка компилятор может сделать это для вас?