Maison > développement back-end > C++ > Comment une fonction de modèle peut-elle déterminer la taille d'un tableau C au moment de la compilation ?

Comment une fonction de modèle peut-elle déterminer la taille d'un tableau C au moment de la compilation ?

Barbara Streisand
Libérer: 2024-12-24 04:28:13
original
233 Les gens l'ont consulté

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

Fonction de modèle pour déterminer la taille du tableau

Considérez la fonction de modèle ci-dessous :

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}
Copier après la connexion

Le but de ce modèle consiste à déterminer la taille d’un tableau passé en argument. Passer un tableau par référence préserve sa taille, plutôt que simplement obtenir un pointeur.

Explication

Pour comprendre cela, considérez ce qui suit :

  • Passer un tableau à une fonction sans référence entraîne une dégradation du pointeur, perdant la taille du tableau informations.
  • Les références aux tableaux, cependant, conservent la taille et le type du tableau.

Dans notre fonction de modèle, le tableau est passé par référence, garantissant que sa taille est capturée. Le modèle déduit automatiquement la taille (n) et le type d'élément (T). Cela nous permet de l'utiliser comme :

size_t array_size(const int (&)[3]) {
    return 3;
}
Copier après la connexion

qui peut être utilisé comme suit :

size_t size_of_a = array_size(a);
Copier après la connexion

Utilisation avancée

Il existe un variante de cette technique qui permet de déterminer la taille au moment de la compilation :

template<typename T, size_t n>
char (& array_size(const T (&)[n]) )[n];
Copier après la connexion

Ce modèle renvoie une référence à un tableau de type char avec size n. En tant que tel, le code suivant donnera la taille du tableau transmis au moment de la compilation :

size_t size_of_a = sizeof(array_size(a));
Copier après la connexion

Cette construction permet des tailles de tableau déterminées au moment de la compilation, prenant en charge des actions telles que :

int havingSameSize[sizeof(array_size(a))];
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal