Mengapa std::function Bukan Kesamaan Setanding?

Patricia Arquette
Lepaskan: 2024-11-01 13:13:02
asal
683 orang telah melayarinya

Why is std::function Not Equality Comparable?

Mengapa std::function Bukan Kesaksamaan Setanding?

Walaupun penggunaannya meluas, std::function tidak setanding. Had ini, juga terpakai untuk meningkatkan::function dan std::tr1::function, berakar umbi dalam pertimbangan reka bentuk bahasa.

Operator Padam Asalnya

Dalam draf awal C 11, pengendali kesamaan untuk fungsi std:: telah diisytiharkan sebagai dipadam, dengan ulasan "lebihan yang dipadamkan ditutup mungkin lubang dalam sistem jenis." Kenyataan yang samar-samar ini membuatkan kita tertanya-tanya tentang sifat "lubang" ini.

"Loophole" Penukaran Seperti Boolean

Menurut spesifikasi TR1, kesaksamaan yang tidak diisytiharkan operator untuk std::function bertujuan untuk menutup celah yang dicipta oleh penukaran seperti boolean. Penukaran ini membenarkan tika fungsi dibandingkan melalui == dan !=.

Pengecualian std::shared_ptr

Tidak seperti std::function, std::shared_ptr mempunyai semantik kesaksamaan yang ditakrifkan dengan baik. Dua penunjuk dianggap sama jika kedua-duanya kosong atau kedua-duanya tidak kosong dan menunjuk ke objek yang sama. Ini kerana peranan std::shared_ptr adalah lebih mudah dan semantik kesamarataannya boleh ditakrifkan dengan mudah.

Kerumitan dan Kesetaraan

Melaksanakan perbandingan kesamaan untuk std::function akan menghendaki semua jenis boleh dipanggil menjadi setanding kesamarataan, yang tidak selalunya boleh dilaksanakan. Selain itu, ujian kesetaraan untuk fungsi boleh menjadi mencabar, terutamanya apabila ia mempunyai pengikatan hujah yang berbeza.

Kesimpulan

Sementara std::function menyediakan cara yang mudah untuk bekerja dengan pelbagai jenis boleh panggil, kekurangan kesamarataan perbandingannya telah menjadi pilihan reka bentuk yang disengajakan. Mengelakkan potensi kelemahan dan menampung sifat kepelbagaian jenis boleh dipanggil adalah pertimbangan utama di sebalik keputusan ini.

Atas ialah kandungan terperinci Mengapa std::function Bukan Kesamaan Setanding?. 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