Maison >développement back-end >C++ >Pourquoi les modèles C ne peuvent-ils pas utiliser des types incomplets ?

Pourquoi les modèles C ne peuvent-ils pas utiliser des types incomplets ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-09 05:47:10654parcourir

Why Can't C   Templates Use Incomplete Types?

Pourquoi C interdit-il les modèles avec des types incomplets ?

Les conteneurs C, tels que ceux de la bibliothèque C standard, n'autorisent pas les types incomplets comme paramètres de modèle. Cette restriction découle de raisons historiques.

Raison d'être historique

Au départ, on pensait que les conteneurs pouvaient prendre en charge des types incomplets. Cependant, les tests ont révélé des incohérences entre les implémentations STL. Le comité de normalisation a ainsi déclaré un comportement indéfini pour les conteneurs STL de fonctionner avec des types incomplets, étendant cette interdiction à l'ensemble de la bibliothèque standard.

Cette décision visait à empêcher l'invalidation des implémentations de bibliothèques existantes en les obligeant à prendre en charge les types incomplets. rétroactivement.

Comprendre l'interdiction

La préoccupation du comité découlait du potentiel de comportement indéfini et nécessité de maintenir une compatibilité ascendante. Les types incomplets dans les modèles introduisent des incertitudes concernant la gestion de la mémoire et la stabilité du code.

Considérations futures

Malgré l'interdiction actuelle, Matt Austern, président du groupe de travail de la bibliothèque C, a prédit que les futures révisions du C pourraient assouplir la restriction sur les types incomplets. Cela pourrait refléter une évolution progressive vers une prise en charge accrue des types incomplets, comme le prévoit la norme C 17 pour certains conteneurs.

Approche alternative

En raison de l'interdiction continue de la norme , les concepteurs de la bibliothèque Boost ont choisi de créer leurs propres conteneurs autorisant les types incomplets. Cette approche évite les limitations imposées par la bibliothèque standard et permet des structures de données plus flexibles.

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