私は、コンパイラに可能な限り多くの作業を任せることが大好きです。単純なクラスを作成する場合、コンパイラは「無料」で次のものを提供できます。
- デフォルト (空の) コンストラクター
- コピー コンストラクター
- デストラクタ
- 代入演算子 (
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
{ }
これには正当な理由がありますか?メンバーごとの比較を実行することが問題になるのはなぜですか? 明らかに、クラスがメモリを割り当てる場合は注意が必要ですが、単純なクラスの場合、コンパイラは確かにこれを行うことができますか?