Dalam C , parameter templat boleh disimpulkan daripada parameter fungsi, membenarkan potongan jenis yang mudah. Walau bagaimanapun, inferens ini tidak dilanjutkan kepada pembina kelas.
Sebab:
Ketiadaan inferens untuk pembina kelas berpunca daripada fakta bahawa pembina bukanlah satu-satunya titik masuk untuk sesuatu kelas. Pembina salin dan pengendali tugasan juga boleh memanipulasi objek tanpa mempunyai maklumat yang jelas tentang parameter templat.
Pertimbangkan contoh berikut:
MyClass m(string s); MyClass *pm; *pm = m;
Dalam senario ini, sukar untuk pengkompil menentukan parameter templat untuk pm, kerana kedua-dua m dan pm kekurangan maklumat ini. Oleh itu, membenarkan inferens untuk pembina kelas akan memperkenalkan ketidakpastian dan kesukaran sintaksis.
Pengecualian dalam C 17:
Dalam C 17, pengecualian kepada peraturan ini telah diperkenalkan. Untuk jenis tertentu, seperti std::pair dan std::tuple, parameter templat boleh disimpulkan daripada hujah pembina.
Apabila Inferens Tidak Diingini:
Dalam sesetengah kes, membuat kesimpulan parameter templat daripada pembina mungkin tidak diingini. Pertimbangkan kelas yang menggunakan parameter templat lalai, yang tidak boleh ditindih oleh pembina. Jika inferens dibenarkan, ia berpotensi mengatasi nilai lalai dan membawa kepada kelakuan yang tidak dijangka.
Oleh itu, sementara inferens parameter templat untuk parameter fungsi meningkatkan ketepatan kod, ketiadaan inferens sedemikian untuk pembina kelas memastikan kejelasan dan menghalang potensi kekaburan dalam penggunaan kelas.
Atas ialah kandungan terperinci Mengapa Parameter Templat C Tidak Boleh Disimpulkan daripada Pembina Kelas, Tidak Seperti Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!