Maison > développement back-end > C++ > Les classes locales peuvent-elles enfin être utilisées comme prédicats pour les algorithmes STL en C 11 ?

Les classes locales peuvent-elles enfin être utilisées comme prédicats pour les algorithmes STL en C 11 ?

Mary-Kate Olsen
Libérer: 2024-11-21 05:04:39
original
631 Les gens l'ont consulté

Can Local Classes Finally Be Used as Predicates for STL Algorithms in C  11?

Utilisation de classes locales avec des algorithmes STL : démêler la restriction de type local

Dans le domaine de la programmation C, les classes locales ont longtemps été interdites car prédicats pour les algorithmes STL, soulevant des questions sur la restriction sous-jacente et sa justification.

Le C La norme 98/03 interdit explicitement les types locaux comme arguments de modèle, y compris les classes locales. L'article 14.3.1 de la norme stipule sans équivoque que "les types locaux [...] ne doivent pas être utilisés comme argument-modèle pour un paramètre de type de modèle."

La justification de cette restriction découle de l'éphémère nature des types locaux. Comme ils existent dans un cadre limité, leurs destructions peuvent se produire de manière inattendue, conduisant potentiellement à un comportement indéfini lorsqu'ils sont utilisés comme prédicats pour les algorithmes STL.

Cependant, avec l'avènement du C 11, cette restriction a été levée. La norme révisée permet d'utiliser des types locaux comme arguments de modèle, permettant ainsi aux classes locales de servir de prédicats pour les algorithmes STL.

Par exemple, considérons l'extrait de code suivant :

#include <algorithm>
#include <vector>

int main() {
    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::vector<int> v(array, array + 10);

    struct even {
        bool operator()(int x) { return !(x % 2); }
    };
    std::remove_if(v.begin(), v.end(), even());
}
Copier après la connexion

Dans ce code, la classe locale définit même un prédicat qui vérifie les nombres pairs. Cette classe peut désormais être utilisée directement comme argument de l'algorithme std::remove_if, qui supprime tous les nombres pairs du vecteur v.

Alors que la restriction sur les types locaux visait initialement à se prémunir contre un comportement potentiel indéfini, sa suppression dans C 11 a ouvert de nouvelles possibilités d'utilisation de classes locales dans des scénarios de programmation fonctionnelle.

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