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
Barbara Streisandoriginal
2024-12-24 04:28:13229parcourir

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;
}

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;
}

qui peut être utilisé comme suit :

size_t size_of_a = array_size(a);

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];

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));

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))];

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!

Déclaration:
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