Pengendali Kapal Angkasa dan Kesannya terhadap Operator Kesaksamaan
Pengendali kapal angkasa <=>, yang diperkenalkan dalam C 20, memberikan ringkasan sintaks untuk perbandingan tiga hala. Walau bagaimanapun, pengguna yang menghadapi tingkah laku yang tidak dijangka apabila menggunakan kedua-dua pengendali kapal angkasa dan pengendali kesaksamaan (== dan !=) mungkin terkejut.
Pelaksanaan Lalai dan Operator Kesaksamaan Dijana
Apabila pengendali kapal angkasa diisytiharkan sebagai lalai (cth., pengendali auto<=>(const X&) const = lalai;), ia membolehkan pengkompil menjana operator == secara automatik berdasarkan perbandingan asas. Ini ditunjukkan dalam contoh berikut:
struct X { int Dummy = 0; auto operator<=>(const X&) const = default; }; int main() { X a, b; a == b; // OK! }
Pelaksanaan Tersuai dan Operator Kesaksamaan Tidak Dijana
Walau bagaimanapun, apabila pelaksanaan tersuai pengendali kapal angkasa disediakan, pengendali kesaksamaan yang dijana tidak lagi tersedia. Ini diperhatikan dalam kandungan soalan, di mana pengendali tersuai<=> pelaksanaan mengakibatkan ralat semasa menggunakan operator ==.
Menaakulan Di Sebalik Tingkah Laku
Tingkah laku ini disengajakan. Piawaian C menyatakan bahawa hanya pengendali kapal angkasa yang lalai mencetuskan penjanaan pengendali kesamarataan ([class.compare.default](https://eel.is/c draft/class.compare.default)). Rasionalnya ialah kelas tertentu, seperti std::vector, mungkin tidak mahu menggunakan operator kapal angkasa untuk semakan kesaksamaan kerana ia mungkin bukan pendekatan yang paling berkesan.
Kesimpulan
Oleh itu, apabila mentakrifkan pengendali kapal angkasa tersuai, adalah penting untuk diingat bahawa ia menghapuskan penjanaan automatik pengendali kesaksamaan. Jika semakan kesaksamaan diperlukan, adalah disyorkan untuk memberikan definisi yang jelas untuk operator ==.
Atas ialah kandungan terperinci Adakah Menggunakan Operator Kapal Angkasa Tersuai Menghalang Penjanaan Operator Kesaksamaan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!