Maison > développement back-end > C++ > Comment la déduction des arguments de modèle détermine-t-elle la taille des tableaux en C ?

Comment la déduction des arguments de modèle détermine-t-elle la taille des tableaux en C ?

Linda Hamilton
Libérer: 2024-12-05 12:12:14
original
961 Les gens l'ont consulté

How Does Template Argument Deduction Determine Array Sizes in C  ?

Comment la déduction d'argument de modèle découvre les tailles de tableau

Dans le code C fourni, la fonction de modèle cal_size imprime la taille d'un argument de référence de tableau. Il est intrigant de voir comment le paramètre de modèle N reflète automatiquement la longueur du tableau transmis.

Déduction d'argument de modèle

N n'est pas une variable initialisée ; c'est une constante au moment de la compilation. Grâce à un processus appelé déduction d'argument de modèle, T et N sont déduits de l'argument transmis à la fonction de modèle.

Considérez les appels suivants à cal_size :

  • Pour le tableau a (longueur 6) : Le compilateur déduit T comme int et N comme 6. Il génère un fonction :
void cal_size_int_6(int (&a)[6]) {
  std::cout << "size of array is: " << 6 << std::endl;
}
Copier après la connexion
  • Pour le tableau b (longueur 1) : Encore une fois, le compilateur déduit T comme int et N comme 1, produisant une autre fonction spécialisée :
void cal_size_int_1(int (&a)[1]) {
  std::cout << "size of array is: " << 1 << std::endl;
}
Copier après la connexion

Appels de fonctions séparés

Essentiellement, le modèle cal_size se traduit en fonctions spécialisées individuelles avec valeurs codées en dur de N et T. La fonction principale devient équivalente à :

int main() {
  cal_size_int_6(a);
  cal_size_int_1(b);
}
Copier après la connexion

En résumé, la déduction d'argument de modèle permet aux modèles de déduire la taille du tableau à partir du type d'argument. Le mécanisme sous-jacent consiste à générer des fonctions spécialisées pour chaque combinaison unique de types d'arguments, chacune avec ses propres valeurs N et T déterminées statiquement.

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