Maison > Article > développement back-end > Explication détaillée des paramètres de fonction C++ : règles de transmission des paramètres dans les expressions lambda
Règles de transmission des paramètres dans les expressions Lambda : Par valeur : transmise par valeur, la modification de la valeur d'origine n'affecte pas la portée externe. Par référence : utilisez la liste de capture [&] ou [=] pour transmettre les paramètres par référence, permettant ainsi la modification de la portée externe. Par déplacement : pour les types mobiles, utilisez la liste de capture && pour transmettre les paramètres par déplacement afin d'optimiser les performances.
Explication détaillée des paramètres de fonction C++ : règles de transmission des paramètres dans les expressions lambda
Expression lambda
L'expression lambda est une syntaxe de pointeur de fonction anonyme concise et puissante. En C++, le format de base d'une expression lambda est :
[capture_list](parameters) -> return_type { body }
Règles de passage des paramètres
Lorsqu'une expression lambda contient des paramètres, le passage des paramètres suit les règles suivantes :
[&]
ou [=]
pour capturer la référence du paramètre, et vous pouvez transmettre le paramètre par référence. [&]
或 [=]
捕获列表捕获参数的引用,可以按引用传递参数。&&
Pour les types mobiles, utilisez la liste de capture &&
pour capturer la référence de déplacement du paramètre, et le paramètre peut être transmis par déplacement.
Exemple pratique
Considérez l'exemple de code C++ suivant :
#include <iostream> #include <vector> int main() { // 创建一个 lambda 表达式,按值传递一个整型参数 auto sum = [](int x) { return x + 1; }; // 实例化一个 lambda 表达式,按引用传递参数 int value = 5; auto increment = [&value]() { value += 1; }; // 实例化一个 lambda 表达式,按移动传递 vector std::vector<int> vec = {1, 2, 3}; auto reverse = [vec = std::move(vec)]() { std::reverse(vec.begin(), vec.end()); }; std::cout << "By Value: " << sum(5) << std::endl; increment(); std::cout << "By Reference: " << value << std::endl; reverse(); std::cout << "By Move: "; for (auto elem : vec) { std::cout << elem << ' '; } std::cout << std::endl; return 0; }
Sortie :
By Value: 6 By Reference: 6 By Move: 3 2 1
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!