Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Fungsi Templat C Menentukan Saiz Array?

Bagaimanakah Fungsi Templat C Menentukan Saiz Array?

DDD
DDDasal
2024-12-05 17:31:11664semak imbas

How Does a C   Template Function Determine the Size of an Array?

Memahami Fungsi Templat "saiz tatasusunan"

Kod ini menggunakan fungsi templat untuk menentukan panjang tatasusunan, tetapi dalamannya kerja boleh menjadi misteri. Mari kita mendalami cara ia melaksanakan tugas ini.

Penyahmistifikasi Parameter

Parameter fungsi, T(&)[saiz], pada mulanya mungkin kelihatan membingungkan. Menyahkodnya dari dalam ke luar mendedahkan rujukan kepada tatasusunan saiz saiz yang tidak dinamakan dengan jenis T. Ini bermakna ia menerima rujukan kepada mana-mana tatasusunan, di mana jenis dan saiz tatasusunan ditentukan oleh parameter templat.

Potongan Templat dalam Tindakan

Apabila fungsi dipanggil dengan tatasusunan, seperti sebagai:

int a[10];
GetArrLength(a);

Pengkompil cuba membuat kesimpulan parameter templat. Untuk memadankan jenis parameter, T mestilah int dan saiz mestilah 10 (menghasilkan parameter yang merujuk tatasusunan 10 integer). Fungsi kemudian mengembalikan saiz, memberikan bilangan elemen dalam tatasusunan.

Mengatasi Isu Potensi

Kod ini mempunyai dua isu yang berpotensi. Pertama, saiz tidak boleh negatif, jadi jenis yang ditandatangani tidak boleh digunakan untuk parameter templat atau jenis pemulangan. Sebaliknya, jenis yang tidak ditandatangani harus digunakan, seperti std::size_t:

template<typename T, std::size_t Size>
std::size_t GetArrLength(T(&amp;)[Size]) { return size; }

Kedua, hasil fungsi bukanlah ungkapan tetap, walaupun sifat saiz tatasusunan yang tetap. Untuk kebolehgunaan yang dipertingkatkan, ungkapan tetap diutamakan:

template <std::size_t N>
struct type_of_size
{
    typedef char type[N];
};

template <typename T, std::size_t Size>
typename type_of_size<Size>::type&amp; sizeof_array_helper(T(&amp;)[Size]);

#define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))

Menggunakan teknik ini, anda boleh mendapatkan semula saiz tatasusunan sebagai ungkapan malar:

int a[10];
const std::size_t n = sizeof_array(a); // constant-expression!

Atas ialah kandungan terperinci Bagaimanakah Fungsi Templat C Menentukan Saiz Array?. 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