Maison >développement back-end >C++ >Comment une fonction de modèle C détermine-t-elle la taille d'un tableau ?
Comprendre la fonction de modèle « taille du tableau »
Ce code utilise une fonction de modèle pour déterminer la longueur d'un tableau, mais son intérieur le fonctionnement peut être énigmatique. Voyons comment il accomplit cette tâche.
Démystification des paramètres
Le paramètre de fonction, T(&)[size], peut initialement sembler déroutant. Le décoder de l'intérieur vers l'extérieur révèle une référence à un tableau sans nom de taille de type T. Cela signifie qu'il accepte les références à n'importe quel tableau, où le type et la taille du tableau sont spécifiés par les paramètres du modèle.
Déduction de modèle en action
Lorsque la fonction est appelée avec un tableau, tel que :
int a[10]; GetArrLength(a);
Le compilateur tente de déduire les paramètres du modèle. Pour correspondre au type de paramètre, T doit être int et size doit être 10 (ce qui donne un paramètre qui fait référence à un tableau de 10 entiers). La fonction renvoie ensuite la taille, fournissant le nombre d'éléments dans le tableau.
Résoudre les problèmes potentiels
Ce code présente deux problèmes potentiels. Premièrement, les tailles ne peuvent pas être négatives, donc un type signé ne doit pas être utilisé pour le paramètre de modèle ou le type de retour. Au lieu de cela, un type non signé doit être utilisé, tel que std::size_t:
template<typename T, std::size_t Size> std::size_t GetArrLength(T(&)[Size]) { return size; }
Deuxièmement, le résultat de la fonction n'est pas une expression constante, malgré la nature constante des tailles de tableau. Pour une meilleure convivialité, une expression constante est préférable :
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& sizeof_array_helper(T(&)[Size]); #define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))
En utilisant cette technique, vous pouvez récupérer la taille d'un tableau sous forme d'expression constante :
int a[10]; const std::size_t n = sizeof_array(a); // constant-expression!
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!