Rumah >pembangunan bahagian belakang >C++ >Mengapa Anda Tidak Boleh Membandingkan Objek `std::function` untuk Kesaksamaan?
Mengapa std::function is Not Equality Comparable
Dalam C , std::function ialah pembalut boleh panggil generik yang membolehkan anda bekerja dengan objek fungsi sewenang-wenangnya. Walaupun kegunaannya, fungsi std:: tidak menyokong perbandingan kesamaan (==). Boost::function and std::tr1::function mempamerkan gelagat yang sama.
Konteks Sejarah
Dalam draf awal standard C 11, std::function mempunyai lebihan beban untuk pengendali kesaksamaan. Walau bagaimanapun, lebihan beban ini kemudiannya diisytiharkan sebagai dipadamkan, dengan rasional untuk menutup "kemungkinan lubang dalam sistem jenis."
"Loophole"
The "loophole" " yang dirujuk dalam draf C 11 berkenaan dengan potensi penukaran bool tersirat untuk membawa kepada perbandingan kesaksamaan yang tidak dijangka. Dalam C 03, simpulan bahasa safe-bool telah diperkenalkan untuk mengelakkan isu ini, dan dalam C 11, fungsi penukaran bool eksplisit telah diperkenalkan. Walau bagaimanapun, langkah-langkah ini tidak menghapuskan sepenuhnya kemungkinan perbandingan kesaksamaan yang tidak dijangka.
Pertimbangan Khusus untuk std::function
Tidak seperti std::shared_ptr, yang mempunyai baik- semantik kesamaan yang ditakrifkan (kesamaan membayangkan menunjuk ke objek yang sama), std::function tidak mempunyai konsep kesamaan yang jelas. Pertimbangkan perkara berikut:
Akibat Tiada Perbandingan
Ketidakupayaan untuk membandingkan objek std::fungsi sebagai sama mempunyai akibat tertentu:
Kesimpulan
Walaupun kekurangan perbandingan kesaksamaan untuk fungsi std:: mungkin menyusahkan dalam senario tertentu, ia akhirnya menghalang potensi kelemahan sistem jenis dan memastikan ketekalan gelagat fungsi merentas pelaksanaan yang berbeza. Untuk aplikasi yang memerlukan perbandingan kesaksamaan, penyelesaian alternatif boleh digunakan, seperti menggunakan kelas pembalut dengan penggantian kesaksamaan yang jelas.
Atas ialah kandungan terperinci Mengapa Anda Tidak Boleh Membandingkan Objek `std::function` untuk Kesaksamaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!