Fonctions Lambda
Les fonctions lambda, ou fonctions anonymes, sont une fonctionnalité qui permet de créer de petites fonctions sans nom directement dans votre code. Elles sont particulièrement utiles lorsque vous avez besoin d'une fonction simple pour une courte durée et que vous ne souhaitez pas définir une fonction nommée distincte.
Les fonctions lambda sont utiles pour plusieurs raisons :
- Concision : Les fonctions lambda permettent d'écrire un code court et concis. Elles sont idéales pour des opérations pouvant être exprimées en quelques lignes.
- Portée locale : Elles peuvent capturer des variables de la portée environnante, ce qui permet d'utiliser des variables de la fonction parente à l'intérieur de la lambda.
- Flexibilité : Les lambdas peuvent être passées comme arguments à d'autres fonctions, ce qui les rend pratiques pour des fonctions telles que
std::for_each,std::sort, etc.
Comment créer une fonction lambda ?
Nous pouvons utiliser la syntaxe suivante pour créer une fonction lambda :
[capture_clause](parameter_list) -> return_type {
// function body
}
Une clause de capture dans une fonction lambda permet de spécifier quelles variables de la portée environnante (en dehors de la fonction lambda) peuvent être accessibles et utilisées à l'intérieur de la fonction lambda. Il existe 3 types courants de clauses de capture :
- Ne rien capturer
[]: La fonction lambda ne peut accéder à aucune variable de la portée environnante. - Capturer des variables spécifiques par valeur
[var1, var2, ...]: La fonction lambda peut accéder à des variables spécifiques de la portée environnante par valeur. - Capturer des variables spécifiques par référence
[&var1, &var2, ...]: La fonction lambda peut accéder à des variables spécifiques de la portée environnante par référence.
main.cpp
12345678910111213#include <iostream> int main() { int multiplier = 2; // Lambda function capturing 'multiplier' by reference and with explicit return type (int) int result = [&multiplier](int num) -> int { return num * num * multiplier; }(5); // Invoking the lambda with argument 5 std::cout << "Result: " << result << std::endl; }
La fonction est construite comme suit :
- La fonction lambda capture la variable
multiplierpar référence[&multiplier]. - Le type de retour
-> intindique que la fonction lambda retourne un entier. - La lambda est immédiatement invoquée avec l’argument
5, et le résultat est stocké dans la variableresult.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Can you give an example of a lambda function in C++?
What does it mean to capture a variable by reference in a lambda?
When should I use a lambda function instead of a regular function?
Awesome!
Completion rate improved to 5
Fonctions Lambda
Glissez pour afficher le menu
Les fonctions lambda, ou fonctions anonymes, sont une fonctionnalité qui permet de créer de petites fonctions sans nom directement dans votre code. Elles sont particulièrement utiles lorsque vous avez besoin d'une fonction simple pour une courte durée et que vous ne souhaitez pas définir une fonction nommée distincte.
Les fonctions lambda sont utiles pour plusieurs raisons :
- Concision : Les fonctions lambda permettent d'écrire un code court et concis. Elles sont idéales pour des opérations pouvant être exprimées en quelques lignes.
- Portée locale : Elles peuvent capturer des variables de la portée environnante, ce qui permet d'utiliser des variables de la fonction parente à l'intérieur de la lambda.
- Flexibilité : Les lambdas peuvent être passées comme arguments à d'autres fonctions, ce qui les rend pratiques pour des fonctions telles que
std::for_each,std::sort, etc.
Comment créer une fonction lambda ?
Nous pouvons utiliser la syntaxe suivante pour créer une fonction lambda :
[capture_clause](parameter_list) -> return_type {
// function body
}
Une clause de capture dans une fonction lambda permet de spécifier quelles variables de la portée environnante (en dehors de la fonction lambda) peuvent être accessibles et utilisées à l'intérieur de la fonction lambda. Il existe 3 types courants de clauses de capture :
- Ne rien capturer
[]: La fonction lambda ne peut accéder à aucune variable de la portée environnante. - Capturer des variables spécifiques par valeur
[var1, var2, ...]: La fonction lambda peut accéder à des variables spécifiques de la portée environnante par valeur. - Capturer des variables spécifiques par référence
[&var1, &var2, ...]: La fonction lambda peut accéder à des variables spécifiques de la portée environnante par référence.
main.cpp
12345678910111213#include <iostream> int main() { int multiplier = 2; // Lambda function capturing 'multiplier' by reference and with explicit return type (int) int result = [&multiplier](int num) -> int { return num * num * multiplier; }(5); // Invoking the lambda with argument 5 std::cout << "Result: " << result << std::endl; }
La fonction est construite comme suit :
- La fonction lambda capture la variable
multiplierpar référence[&multiplier]. - Le type de retour
-> intindique que la fonction lambda retourne un entier. - La lambda est immédiatement invoquée avec l’argument
5, et le résultat est stocké dans la variableresult.
Merci pour vos commentaires !