Pourquoi les paramètres de modèle non-type ne peuvent-ils pas être des chaînes ?
En C, les paramètres de modèle non-type doivent être des expressions intégrales constantes. Cependant, le code ci-dessous tente d'utiliser un std::string comme paramètre de modèle non-type :
template <std::string temp> void foo() { // ... }
Cela entraîne une erreur du compilateur indiquant que std::string est un type illégal pour un non- tapez le paramètre de modèle.
La raison de cette restriction est que les expressions non constantes ne peuvent pas être analysées et substituées lors de la compilation. Ils pourraient changer pendant l'exécution, ce qui nécessiterait la génération d'un nouveau modèle au moment de l'exécution. Étant donné que les modèles sont un concept au moment de la compilation, cela n'est pas possible.
La norme C 11 autorise explicitement uniquement certains types pour les paramètres de modèle non-type :
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!