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

Bagaimanakah Potongan Argumen Templat C Menentukan Saiz Tatasusunan dalam Templat Fungsi?

Mary-Kate Olsen
Lepaskan: 2024-11-30 15:22:12
asal
642 orang telah melayarinya

How Does C   Template Argument Deduction Determine Array Sizes in Function Templates?

Memahami Potongan Argumen Templat dalam Templat Fungsi

Pertimbangkan kod berikut di mana templat fungsi cal_size digunakan untuk mengira dan mencetak saiz tatasusunan :

#include <iostream>

template <typename T, size_t N>
void cal_size(T (&amp;a)[N])
{
    std::cout << "size of array is: " << N << std::endl;
}
Salin selepas log masuk

Apabila program dijalankan, ia mencetak saiz yang betul untuk kedua-duanya tatasusunan:

int a[] = {1,2,3,4,5,6};
int b[] = {1};

cal_size(a);
cal_size(b);
Salin selepas log masuk

Jadi, bagaimanakah fungsi templat cal_size secara automatik menyimpulkan saiz tatasusunan yang diluluskan, walaupun saiznya tidak diluluskan secara eksplisit sebagai hujah?

Jawapannya terletak pada konsep potongan hujah templat dalam C . Begini caranya:

Semasa penyusunan, pengkompil melakukan potongan hujah templat untuk menentukan jenis T dan nilai N berdasarkan jenis sebenar hujah yang dihantar kepada fungsi templat. Dalam kes ini, apabila cal_size dipanggil dengan argumen a, pengkompil menyimpulkan T sebagai int dan N sebagai 6, mencipta fungsi khusus cal_size_int_6 pada masa penyusunan:

void cal_size_int_6(int (&amp;a)[6])
{
    std::cout << "size of array is: " << 6 << std::endl;
}
Salin selepas log masuk

Begitu juga, untuk hujah b, pengkompil menyimpulkan T sebagai int dan N sebagai 1, menghasilkan pengkhususan cal_size_int_1:

void cal_size_int_1(int (&amp;a)[1])
{
    std::cout << "size of array is: " << 1 << std::endl;
}
Salin selepas log masuk

Oleh itu, templat cal_size asal berkesan mencipta dua pengkhususan fungsi berasingan, masing-masing dengan nilai T dan N berkod kerasnya sendiri. Proses ini memastikan saiz tatasusunan yang betul dicetak untuk setiap panggilan ke cal_size.

Atas ialah kandungan terperinci Bagaimanakah Potongan Argumen Templat C Menentukan 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