Maison > développement back-end > C++ > Pourquoi les classes locales ne peuvent-elles pas être utilisées comme prédicats dans les algorithmes STL (C 98/03) ?

Pourquoi les classes locales ne peuvent-elles pas être utilisées comme prédicats dans les algorithmes STL (C 98/03) ?

DDD
Libérer: 2024-11-22 10:16:10
original
731 Les gens l'ont consulté

Why Can't Local Classes Be Used as Predicates in STL Algorithms (C  98/03)?

L'énigme des classes locales dans les algorithmes STL

Bien que les expressions lambda soient largement utilisées comme prédicats dans les algorithmes STL, les classes locales semblent être mystérieusement exclus de cet utilitaire. Dans cette question, nous cherchons à démêler la restriction imposée par la norme qui interdit aux types locaux de participer aux algorithmes STL en tant que prédicats.

L'interdiction de la norme

L'absence de les classes en tant que types de prédicats dans les algorithmes STL découlent d'une interdiction explicite imposée par la norme C 98/03, comme indiqué dans l'article C 03 14.3.1 :

"Un type local, un type sans lien, un type sans nom ou un type composé de l'un de ces types ne doit pas être utilisé comme argument de modèle pour un paramètre de type de modèle."

Cette restriction se manifeste dans les compilateurs signalant le code comme dans l'exemple fourni, où la structure locale ne peut même pas être utilisée comme prédicat pour std::remove_if.

Justification de la restriction

La justification de cette exclusion est entourée de conjectures. Certains pensent qu'il s'agissait d'un oubli, tandis que d'autres pensent qu'il visait à empêcher les définitions de types ad hoc et potentiellement déroutantes au sein des algorithmes.

Évolution en C 11

Heureusement, la norme C 11 a corrigé ce problème, en supprimant la restriction sur les types locaux comme arguments de modèle. Par conséquent, les compilateurs contemporains autorisent généralement l'utilisation de classes locales comme prédicats dans les algorithmes STL.

Conclusion

Si l'interdiction initiale des classes locales était une source de frustration, son la suppression dans C 11 a ouvert de nouvelles voies pour l'utilisation des types locaux dans les algorithmes STL. Aujourd'hui, les expressions lambda et les classes locales coexistent en tant qu'options de prédicats efficaces, offrant aux développeurs des outils polyvalents pour la manipulation d'algorithmes.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal