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
Lepaskan: 2024-12-05 12:12:14
asal
914 orang telah melayarinya

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

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

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!

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