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