Rumah >pembangunan bahagian belakang >C++ >Mengapa Parameter Templat C Tidak Boleh Disimpulkan daripada Pembina Kelas, Tidak Seperti Fungsi?

Mengapa Parameter Templat C Tidak Boleh Disimpulkan daripada Pembina Kelas, Tidak Seperti Fungsi?

Patricia Arquette
Patricia Arquetteasal
2024-12-03 15:13:13718semak imbas

Why Can't C   Template Parameters Be Inferred from Class Constructors, Unlike Functions?

Mengapa Parameter Templat Tidak Boleh Disimpulkan daripada Pembina Kelas?

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!

Kenyataan:
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