Rumah > Artikel > pembangunan bahagian belakang > Mengapa Parameter Jenis Templat Tidak Boleh Disimpulkan daripada Argumen Fungsi Lalai dalam C ?
Mengapa Parameter Jenis Templat Tidak Boleh Ditolak daripada Argumen Fungsi Lalai
Dalam C , salah tanggapan biasa ialah pengkompil boleh menyimpulkan parameter jenis templat daripada argumen fungsi lalai. Walau bagaimanapun, ini tidak berlaku.
Apabila menemui kod berikut:
<code class="cpp">struct foo { template <typename T> void bar(int a, T b = 0.0f) { } }; int main() { foo a; a.bar(5); // Error: could not deduce template argument for T }</code>
pengkompil gagal menyimpulkan jenis T daripada argumen lalai 0.0f. Sebaliknya, ia memerlukan spesifikasi yang jelas, seperti dalam a.bar
C 03 Larangan
Dalam C 03, spesifikasi bahasa secara eksplisit melarang penggunaan argumen fungsi lalai untuk potongan hujah templat (C 03 §14.8.2/17):
A template type-parameter cannot be deduced from the type of a function default argument.
C 11 Argumen Templat Lalai
Dalam C 11, penyelesaian muncul: memperkenalkan argumen templat lalai. Dengan mengubah suai kod seperti berikut:
<code class="cpp">template <typename T = float> void bar(int a, T b = 0.0f) { }</code>
parameter templat lalai T disediakan. Walau bagaimanapun, perlu diambil perhatian bahawa mempunyai argumen templat lalai tidak mengurangkan sekatan pada argumen fungsi lalai.
Menurut C 11 14.8.2.5/5, argumen fungsi lalai dianggap "konteks tidak disimpulkan" dalam proses pemotongan hujah templat. Ini bermakna pengkompil tidak boleh menggunakan nilai lalai daripada argumen fungsi untuk membuat kesimpulan parameter jenis templat.
Kesimpulan
Walaupun argumen fungsi lalai memberikan kemudahan, parameter jenis templat tidak boleh disimpulkan daripada mereka. Untuk kes di mana nilai lalai diperlukan, argumen templat lalai menawarkan penyelesaian yang lebih mudah alih dan fleksibel.
Atas ialah kandungan terperinci Mengapa Parameter Jenis Templat Tidak Boleh Disimpulkan daripada Argumen Fungsi Lalai dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!