Maison  >  Article  >  développement back-end  >  Quelle est la différence entre les objets fonction STL et les expressions lambda C++ ?

Quelle est la différence entre les objets fonction STL et les expressions lambda C++ ?

PHPz
PHPzoriginal
2024-04-25 12:18:01560parcourir

Les objets fonction et les expressions lambda sont tous deux des outils permettant de créer des fonctions anonymes. Les principales différences sont : Syntaxe : les objets fonction utilisent des définitions de classe, tandis que les expressions lambda utilisent la syntaxe []. Portée : les objets fonction peuvent être utilisés en dehors de la classe, tandis que les expressions lambda sont limitées à la portée de la définition. Capture : les objets fonction ne peuvent pas capturer de variables externes, mais les expressions lambda peuvent être capturées via des listes de capture. Frais généraux : les frais généraux de création d’objets de fonction sont faibles, les frais généraux d’expression lambda sont élevés. Réutilisabilité : les objets fonction sont généralement réutilisables, les expressions lambda sont généralement à usage unique.

STL 函数对象与 C++ lambda 表达式的区别是什么?

La différence entre les objets fonction STL et les expressions lambda C++

Les objets fonction et les expressions lambda sont tous deux des outils utilisés pour créer des fonctions anonymes en C++. Bien qu'ils présentent des similitudes, il existe également des différences clés :

Syntaxe

  • Objets fonction : Utilisez des classes pour déclarer.
  • expression lambda : définie à l'aide de la syntaxe [].

Scope

  • Objet Fonction : Peut être utilisé en dehors de la classe.
  • expressions lambda : ne sont valables que dans le cadre dans lequel elles sont définies.

Capture

  • Objet fonction : Impossible de capturer des variables externes.
  • Expression lambda : Les variables externes peuvent être capturées via des listes de capture.

Overhead

  • Objets de fonction : Faible surcharge de création.
  • expression lambda : Coûteuse à créer car elle nécessite de générer une fermeture.

Réutilisabilité

  • Objets fonctionnels : sont généralement réutilisables.
  • expression lambda : Habituellement, à usage unique.

Cas pratique

Supposons que nous ayons un tableau d'entiers et que nous voulions trouver le premier élément qui remplit une certaine condition (par exemple, le premier élément supérieur à 10).

Utilisation d'un objet fonction :

class GreaterThan10 {
public:
    bool operator()(int x) { return x > 10; }
};

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), GreaterThan10());
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}

Utilisation d'une expression lambda :

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), [](int x) { return x > 10; });
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}

Dans cet exemple, une expression lambda est utilisée pour créer une fonction anonyme qui détermine si un entier est supérieur à 10.

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