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
DDDoriginal
2024-11-22 10:16:10725parcourir

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!

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