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
Lepaskan: 2024-12-03 15:13:13
asal
697 orang telah melayarinya

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;
Salin selepas log masuk

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!

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