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!