Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah C Menyimpulkan Saiz Tatasusunan dalam Templat Fungsi?

Bagaimanakah C Menyimpulkan Saiz Tatasusunan dalam Templat Fungsi?

Barbara Streisand
Lepaskan: 2024-11-28 17:15:17
asal
922 orang telah melayarinya

How Does C   Deduce Array Size in Function Templates?

Penolakan Saiz Tatasusunan dalam Templat Fungsi

Dalam kod C yang disediakan, templat fungsi bernama cal_size diisytiharkan untuk menerima tatasusunan sebagai hujahnya. Templat fungsi menyimpulkan saiz tatasusunan daripada jenis hujah dan mencetaknya.

Timbul persoalan: bagaimana parameter templat N secara automatik dimulakan kepada saiz tatasusunan yang betul tanpa menyatakannya secara eksplisit dalam fungsi call?

Potongan Argumen Templat

Kunci untuk memahami tingkah laku ini terletak pada proses potongan hujah templat. Apabila fungsi templat dipanggil, pengkompil menggunakan jenis argumen sebenar untuk menyimpulkan nilai parameter templat.

Dalam kes cal_size, jenis argumen ialah tatasusunan elemen jenis T dengan saiz yang ditentukan N. Pengkompil menyimpulkan T daripada jenis elemen tatasusunan, dan N daripada saiz tatasusunan.

Apabila hujah a dihantar ke fungsi, pengkompil menyimpulkan T sebagai int dan N sebagai 6. Begitu juga, apabila b diluluskan, T ialah int dan N ialah 1.

Pengkhususan Templat Fungsi

Berdasarkan nilai deduksi T dan N, pengkompil menjana versi templat fungsi yang berasingan dan khusus. Untuk setiap panggilan, fungsi khusus dicipta dengan maklumat jenis dan saiz khusus tatasusunan argumen.

Dalam kes khusus ini, dua fungsi khusus dijana:

  • cal_size_int_6 untuk int [6] tatasusunan
  • cal_size_int_1 untuk int[1] tatasusunan

Fungsi utama pada dasarnya diterjemahkan kepada memanggil fungsi khusus ini.

Atas ialah kandungan terperinci Bagaimanakah C Menyimpulkan Saiz Tatasusunan dalam Templat 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