Introduction
Instanciation de modèle en deux phases, également connue en tant que recherche précoce et tardive, est un aspect crucial de la programmation de modèles C. Cependant, l'implémentation Visual C (MSVC) de cette fonctionnalité par Microsoft a fait l'objet d'un examen minutieux car elle serait apparemment inadéquate.
Recherche en deux phases en théorie
Dans un compilateur C standard, la recherche en deux phases s'applique aux fonctions et classes de modèle. Dans la première phase, le compilateur effectue une vérification syntaxique, identifiant les déclarations avec le nom approprié. La recherche et la liaison réelles des noms sont différées jusqu'à la deuxième phase, qui se produit lors de l'instanciation du modèle.
Mise en œuvre limitée de MSVC
Contrairement aux attentes, la recherche de modèle de MSVC est limitée . Dans la première phase, il effectue uniquement une vérification syntaxique de base. Le problème survient dans la deuxième phase, où il ne parvient pas à :
Conséquences d'une recherche interrompue
La mise en œuvre défectueuse de la recherche en deux phases la recherche dans MSVC peut entraîner des erreurs lors de l'instanciation du modèle. Par exemple, considérons le code suivant :
int foo(void*); template<typename T> struct S { S() { int i = foo(0); } }; void foo(int); int main() { S<int> s; }
Dans cet exemple, un compilateur conforme aux normes effectuerait une recherche anticipée et lierait « foo(0) » à « foo(void*) » dans le constructeur. Cependant, MSVC différait la recherche jusqu'à l'instanciation, provoquant une erreur de compilation en raison de la surcharge ambiguë de 'foo'.
Conclusion
Bien que MSVC propose une implémentation de base de deux -phase de recherche de modèle, elle ne répond pas aux attentes de la norme. La recherche précoce incomplète et l'extension incorrecte de la recherche non ADL peuvent introduire des erreurs et limiter la convivialité des modèles dans les projets basés sur MSVC. Comprendre ces limitations est crucial pour gérer efficacement le code basé sur des modèles dans cet environnement.
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!