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 ?

Comment la déduction des arguments du modèle C détermine-t-elle la taille des tableaux dans les modèles de fonctions ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-30 15:22:12652parcourir

How Does C   Template Argument Deduction Determine Array Sizes in Function Templates?

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 (&amp;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 (&amp;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 (&amp;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!

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