Apabila menggunakan pengendali kapal angkasa baharu (<=>) dalam C 20, adalah penting untuk mengambil perhatian implikasi melaksanakan pengendali tersuai berbanding bergantung pada pelaksanaan lalai.
Dalam contoh pertama, anda menggunakan operator lalai<=> pelaksanaan yang disediakan oleh bahasa. Pelaksanaan lalai ini membolehkan pengkompil menjana pengendali == secara automatik. Walau bagaimanapun, apabila anda melaksanakan pengendali tersuai<=> fungsi, pengkompil tidak lagi boleh menjana operator == yang sepadan secara tersirat.
Tingkah laku ini disengajakan, seperti yang dinyatakan dalam standard C ([class.compare.default](https://en.cppreference.com /w/cpp/language/comparison#Class_comparison)):
If the class definition does not explicitly declare an == operator function, but declares a defaulted three-way comparison operator function, an == operator function is declared implicitly with the same access as the three-way comparison operator function.
Sebab di sebalik pilihan reka bentuk ini adalah untuk menghalang penjanaan tersirat == dalam situasi di mana ia mungkin bukan cara yang paling berkesan untuk menentukan kesamarataan. Sebagai contoh, kelas seperti std::vector tidak seharusnya menggunakan <=> untuk ujian kesaksamaan kerana membandingkan saiz dahulu adalah lebih cekap.
Dalam adat <=> pelaksanaan, kelas mungkin menjalankan operasi khusus yang memerlukan pelaksanaan tersuai untuk == juga. Oleh itu, daripada menjana pelaksanaan lalai yang berpotensi tidak optimum, bahasa menyerahkannya kepada pengaturcara untuk mentakrif operator == secara eksplisit.
Atas ialah kandungan terperinci Mengapa Operator Kapal Angkasa Tidak Lalai Menghasilkan `==` dan `!=` dalam C 20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!