Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Fungsi Templat Menentukan Saiz Tatasusunan C pada Masa Penyusunan?

Bagaimanakah Fungsi Templat Menentukan Saiz Tatasusunan C pada Masa Penyusunan?

Barbara Streisand
Barbara Streisandasal
2024-12-24 04:28:13223semak imbas

How Can a Template Function Determine the Size of a C   Array at Compile Time?

Fungsi Templat untuk Menentukan Saiz Tatasusunan

Pertimbangkan fungsi templat di bawah:

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}

Tujuan templat ini adalah untuk menentukan saiz tatasusunan yang diluluskan sebagai hujah. Melepasi tatasusunan melalui rujukan mengekalkan saiznya, bukannya hanya mendapatkan penuding.

Penjelasan

Untuk memahami perkara ini, pertimbangkan perkara berikut:

  • Melalukan tatasusunan kepada fungsi tanpa rujukan mengakibatkan pereputan penunjuk, kehilangan saiz tatasusunan maklumat.
  • Rujukan kepada tatasusunan, walau bagaimanapun, mengekalkan saiz dan jenis tatasusunan.

Dalam fungsi templat kami, tatasusunan diluluskan melalui rujukan, memastikan saiznya ditangkap. Templat secara automatik menyimpulkan saiz (n) dan jenis elemen (T). Ini membolehkan kami menggunakannya sebagai:

size_t array_size(const int (&)[3]) {
    return 3;
}

yang boleh digunakan seperti berikut:

size_t size_of_a = array_size(a);

Penggunaan Lanjutan

Terdapat variasi teknik ini yang membolehkan penentuan saiz masa kompilasi:

template<typename T, size_t n>
char (& array_size(const T (&)[n]) )[n];

Templat ini mengembalikan rujukan kepada tatasusunan jenis char dengan saiz n. Oleh itu, kod berikut akan memberikan saiz tatasusunan yang diluluskan pada masa penyusunan:

size_t size_of_a = sizeof(array_size(a));

Pembinaan ini membolehkan saiz tatasusunan yang ditentukan masa kompilasi, menyokong tindakan seperti:

int havingSameSize[sizeof(array_size(a))];

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