Maison  >  Article  >  développement back-end  >  Les modèles de conteneurs standard peuvent-ils être instanciés avec des types incomplets ?

Les modèles de conteneurs standard peuvent-ils être instanciés avec des types incomplets ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-04 14:59:40940parcourir

Can Standard Container Templates be Instantiated with Incomplete Types?

Modèles de conteneurs standard et types incomplets

La question se pose de savoir si les modèles de conteneurs standard peuvent être instanciés avec des types incomplets. Bien que certaines constructions de conteneurs puissent sembler fonctionner dans la pratique, la norme C 11 l'interdit explicitement en vertu du §17.6.4.8 [lib.res.on.functions].

La norme stipule que "… si un type incomplet (3.9) est utilisé comme argument de modèle lors de l'instanciation d'un composant de modèle, sauf autorisation spécifique pour ce composant. Cette restriction s'applique aux fonctions membres, aux définitions de classes membres et aux signatures, mais pas aux opérations dans la portée du bloc.

L'implémentation de la bibliothèque standard ne peut pas induire d'instanciations de modèles qui échoueraient pour des types incomplets, même si d'autres instanciations spécifiquement requises réussissent . Cette interdiction vise à éviter des problèmes potentiels, tels que les types auto-référentiels résultant d'optimisations telles que les « petits vecteurs ».

Des exceptions existent, comme le modèle de classe std::unique_ptr, qui prend explicitement en charge les arguments de type incomplets, même dans la portée du bloc. Cependant, pour les conteneurs standard, la restriction sur l'utilisation de types incomplets reste en place, garantissant un comportement cohérent entre les implémentations.

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