Maison > développement back-end > C++ > 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
Libérer: 2024-11-04 14:59:40
original
1023 Les gens l'ont consulté

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!

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