Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Potongan Argumen Templat Menentukan Saiz Tatasusunan dalam C?

Bagaimanakah Potongan Argumen Templat Menentukan Saiz Tatasusunan dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 12:12:14939semak imbas

How Does Template Argument Deduction Determine Array Sizes in C  ?

Cara Potongan Argumen Templat Mendedahkan Saiz Tatasusunan

Dalam kod C yang disediakan, fungsi templat cal_size mencetak saiz argumen rujukan tatasusunan. Sungguh menarik bagaimana parameter templat N secara automatik mencerminkan panjang tatasusunan yang diluluskan.

Potongan Argumen Templat

N bukan pembolehubah yang dimulakan; ia adalah pemalar masa kompilasi. Melalui proses yang dikenali sebagai potongan hujah templat, kedua-dua T dan N disimpulkan daripada hujah yang dihantar kepada fungsi templat.

Pertimbangkan panggilan berikut untuk cal_size:

  • Untuk tatasusunan (panjang 6): Pengkompil menyimpulkan T sebagai int dan N sebagai 6. Ia menghasilkan fungsi:
void cal_size_int_6(int (&a)[6]) {
  std::cout << "size of array is: " << 6 << std::endl;
}
  • Untuk tatasusunan b (panjang 1): Sekali lagi, pengkompil membuat kesimpulan T sebagai int dan N sebagai 1, menghasilkan satu lagi fungsi khusus:
void cal_size_int_1(int (&a)[1]) {
  std::cout << "size of array is: " << 1 << std::endl;
}

Panggilan Fungsi Berasingan

Pada asasnya, templat cal_size diterjemahkan kepada fungsi khusus individu dengan nilai kod keras N dan T. Fungsi utama menjadi setara dengan:

int main() {
  cal_size_int_6(a);
  cal_size_int_1(b);
}

Ringkasnya, potongan hujah templat membolehkan templat menyimpulkan saiz tatasusunan daripada jenis hujah. Mekanisme asas melibatkan penjanaan fungsi khusus untuk setiap gabungan unik jenis hujah, masing-masing dengan nilai N dan T yang ditentukan secara statiknya sendiri.

Atas ialah kandungan terperinci Bagaimanakah Potongan Argumen Templat Menentukan Saiz Tatasusunan dalam C?. 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