Maison > Article > développement back-end > Les types incomplets sont-ils des arguments légitimes en faveur de l’instanciation de conteneurs standard ?
Les types incomplets peuvent-ils améliorer les conteneurs standard ?
Dans la recherche de structures de données récursives, les développeurs ont souvent recours à l'instanciation de conteneurs standard avec des types incomplets. Cependant, la légalité de telles constructions a été débattue en raison des directives limitées de la norme sur l'utilisation d'arguments de modèle incomplets.
La préoccupation provient d'un passage du §17.6.4.8 [lib.res.on.functions], où la norme interdit les types incomplets comme arguments de modèle lors de l'instanciation de composants de modèle, sauf autorisation explicite pour ce composant. Cela soulève des questions sur la validité de constructions telles que :
<code class="cpp">struct multi_tree_node { std::vector< multi_tree_node & > child; };</code>
Bien que de telles constructions fonctionnent souvent de manière transparente dans la pratique, le silence de la norme sur l'instanciation de type incomplète a semé le doute sur leur légalité.
Cependant, un examen plus approfondi révèle que la restriction de la norme sur les types incomplets s'applique principalement aux « opérations sur les types » qui, dans le contexte du §17.6.4.8, font référence aux fonctions. Étant donné que l'instanciation d'un conteneur n'implique l'exécution d'aucune fonction dans ses définitions de membres, l'instanciation elle-même ne peut pas violer l'interdiction de la norme.
Cette interprétation est étayée par l'existence de std::unique_ptr, qui autorise explicitement les arguments de type incomplets même dans la portée du bloc. De plus, la justification de la norme derrière l'interdiction de l'instanciation de type incomplet, en ce qui concerne la mise en œuvre efficace de techniques d'optimisation telles que le « petit vecteur », n'est pas applicable à l'instanciation de conteneur.
Par conséquent, même si la norme décourage l'utilisation de types incomplets comme arguments lors de l'instanciation de composants de modèle, la légalité de l'instanciation de conteneurs standard avec des types incomplets reste ambiguë. Cependant, jusqu'à ce que des éclaircissements supplémentaires soient fournis par la norme, il est conseillé de faire preuve de prudence avec de telles constructions.
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!