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

source:php.cn
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