Rumah >pembangunan bahagian belakang >C++ >Mengapa Pengkompil C Tidak Menjana Operator Kesaksamaan (==) dan Ketaksamaan (!=) Secara Automatik?
Dalam C , pengkompil secara automatik menyediakan pelaksanaan lalai untuk operasi tertentu, termasuk pembina, pengendali tugasan, dan pemusnah. Walau bagaimanapun, ia tidak menjana pengendali kesamaan lalai (==) dan ketidaksamaan (!=).
Sebab Pengecualian
Keputusan untuk tidak menyediakan pengendali kesamarataan lalai berpunca daripada potensi isu yang berkaitan dengan perbandingan ahli dengan ahli. Jika kelas mengendalikan peruntukan memori atau mengandungi struktur data yang kompleks, perbandingan lalai mungkin membawa kepada hasil yang tidak dijangka atau tingkah laku yang salah.
Perspektif Stroustrup
Pencipta C, Bjarne Stroustrup , telah menyatakan kebimbangan mengenai pembina salinan lalai automatik. Dia percaya bahawa penyalinan harus dikawal secara eksplisit oleh pengaturcara, dan dia tidak menggalakkan penggunaannya untuk jenis objek tertentu.
Konsekuensi untuk Pengaturcara
Ketiadaan pengendali kesamaan yang dijana oleh pengkompil bermakna pengaturcara mesti menulis fungsi perbandingan tersuai untuk kelas mereka. Tanggungjawab tambahan ini memastikan bahawa kelas kompleks dibandingkan dengan betul tanpa menjejaskan integriti data.
Contoh
Pertimbangkan kelas berikut:
class Foo { public: std::string str_; int n_; };
Untuk membandingkan objek kelas ini, pengaturcara mesti melaksanakan kesamaan operator:
bool operator==(const Foo& f1, const Foo& f2) { return (f1.str_ == f2.str_ && f1.n_ == f2.n_); }
Kesimpulan
Pengkompil C tidak mentakrifkan secara automatik pengendali kesamaan dan ketidaksamaan untuk mengelakkan kemungkinan ralat dan mengekalkan kawalan ke atas perbandingan objek. Pengaturcara mesti mentakrifkan fungsi perbandingan tersuai untuk kelas kompleks untuk memastikan perbandingan kejadian kelas yang tepat dan boleh dipercayai.
Atas ialah kandungan terperinci Mengapa Pengkompil C Tidak Menjana Operator Kesaksamaan (==) dan Ketaksamaan (!=) Secara Automatik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!