Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Operator Kapal Angkasa Tidak Lalai Menghasilkan `==` dan `!=` dalam C 20?

Mengapa Operator Kapal Angkasa Tidak Lalai Menghasilkan `==` dan `!=` dalam C 20?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 22:13:03225semak imbas

Why Doesn't the Non-defaulted Spaceship Operator Generate `==` and `!=` in C  20?

Mengapa Operator Kapal Angkasa Tidak Lalai Tidak Menjana == dan !=

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn