Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Menggunakan `==` dan `!=` dengan Operator `<=>` Tersuai dalam C 20?

Mengapa Saya Tidak Boleh Menggunakan `==` dan `!=` dengan Operator `<=>` Tersuai dalam C 20?

Linda Hamilton
Lepaskan: 2024-11-07 21:11:03
asal
1110 orang telah melayarinya

Why Can't I Use `==` and `!=` with a Custom `<=>` Operator dalam C 20? 
` Operator dalam C 20? " />

Operator Tidak Lalai <=> dan Ketiadaan == dan !=

Dalam C 20, pengendali kapal angkasa <=> ; menyediakan mekanisme perbandingan tujuan umum Walau bagaimanapun, tingkah laku pelik timbul apabila menggunakan pelaksanaan perbandingan tiga hala tersuai.

Pelaksanaan Lalai Menjana == dan !=

Pertimbangkan kod berikut menggunakan pelaksanaan lalai <=>:

struct X {
    int Dummy = 0;
    auto operator<=>(const X&amp;) const = default; // Default implementation
};
Salin selepas log masuk

Dalam kes ini, kod berjaya menyusun dan membenarkan penggunaan == dan != untuk membandingkan kejadian X:

X a, b;

a == b; // OK!
Salin selepas log masuk

Blok Pelaksanaan Tersuai == dan !=

Walau bagaimanapun, apabila pelaksanaan tersuai <=> disediakan:

struct X {
    int Dummy = 0;
    auto operator<=>(const X&amp; other) const {
        return Dummy <=> other.Dummy;
    }
};
Salin selepas log masuk

Menyusun hasil dalam ralat:

error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator
Salin selepas log masuk

Sebab Kelakuan

Tingkah laku ini disengajakan mengikut piawaian C 20:

Jika definisi kelas tidak mengisytiharkan fungsi operator == secara eksplisit, tetapi mengisytiharkan fungsi perbandingan tiga hala lalai, fungsi operator == diisytiharkan secara tersirat dengan akses yang sama seperti fungsi operator perbandingan tiga hala. .

Hanya <=> operator menjana == disintesis. Ini kerana kelas seperti std::vector tidak seharusnya menggunakan <=> untuk ujian kesaksamaan, kerana ia mungkin kurang cekap daripada pelaksanaan tersuai.

Oleh itu, jika kelas mempunyai tersuai <=> pelaksanaan, pengaturcara juga mesti menyediakan pelaksanaan == tersuai untuk memastikan tingkah laku perbandingan yang betul.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan `==` dan `!=` dengan Operator `<=>` Tersuai dalam C 20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan