Saya penggemar berat membiarkan kompiler melakukan sebanyak mungkin pekerjaan untuk Anda. Saat menulis kelas sederhana kompiler dapat memberi Anda yang berikut ini secara 'gratis':
- Konstruktor (kosong) default
- Pembuat salinan
- Seorang destruktor
- Operator penugasan (
operator=
)
Tapi sepertinya tidak bisa memberi Anda operator perbandingan - seperti operator==
atau operator!=
. Sebagai contoh:
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
{ }
Apakah ada alasan bagus untuk ini? Mengapa melakukan perbandingan anggota-oleh-anggota menjadi masalah? Tentunya jika kelas mengalokasikan memori maka Anda ingin berhati-hati, tetapi untuk kelas sederhana tentunya kompiler dapat melakukan ini untuk Anda?
==
, dengan cara yang sama bahwa ada tugas otomatis default ( =
) dalam kondisi tertentu. (Argumen tentang pointer tidak konsisten karena logika berlaku untuk =
dan ==
, dan bukan hanya untuk yang kedua).