Maison >développement back-end >C++ >Comment la déduction des arguments du modèle C détermine-t-elle la taille des tableaux dans les modèles de fonctions ?
Comprendre la déduction des arguments de modèle dans les modèles de fonctions
Considérez le code suivant dans lequel un modèle de fonction cal_size est utilisé pour calculer et imprimer la taille des tableaux :
#include <iostream> template <typename T, size_t N> void cal_size(T (&a)[N]) { std::cout << "size of array is: " << N << std::endl; }
Lorsque le programme s'exécute, il imprime la taille correcte pour les deux arrays :
int a[] = {1,2,3,4,5,6}; int b[] = {1}; cal_size(a); cal_size(b);
Alors, comment la fonction modèle cal_size déduit-elle automatiquement la taille des tableaux transmis, même si la taille n'est pas explicitement passée en argument ?
La réponse réside dans le concept de déduction d'argument de modèle en C . Voici comment cela fonctionne :
Lors de la compilation, le compilateur effectue une déduction d'argument de modèle pour déterminer le type de T et la valeur de N en fonction du type réel de l'argument transmis à la fonction de modèle. Dans ce cas, lorsque cal_size est appelé avec l'argument a, le compilateur déduit T comme int et N comme 6, créant une fonction spécialisée cal_size_int_6 au moment de la compilation :
void cal_size_int_6(int (&a)[6]) { std::cout << "size of array is: " << 6 << std::endl; }
De même, pour l'argument b, le le compilateur déduit T comme int et N comme 1, ce qui entraîne la spécialisation cal_size_int_1 :
void cal_size_int_1(int (&a)[1]) { std::cout << "size of array is: " << 1 << std::endl; }
Par conséquent, le modèle cal_size d'origine crée effectivement deux spécialisations de fonctions distinctes, chacune avec ses propres valeurs T et N codées en dur. Ce processus garantit que la taille correcte du tableau est imprimée pour chaque appel à cal_size.
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!