Rumah >pembangunan bahagian belakang >C++ >Adakah Menggunakan Operator Kapal Angkasa Tersuai Menghalang Penjanaan Operator Kesaksamaan dalam C ?

Adakah Menggunakan Operator Kapal Angkasa Tersuai Menghalang Penjanaan Operator Kesaksamaan dalam C ?

DDD
DDDasal
2024-11-09 17:56:02785semak imbas

Does Using a Custom Spaceship Operator Prevent the Generation of Equality Operators in C  ?

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&amp;) 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!

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