Maison >développement back-end >C++ >Explication détaillée des paramètres de fonction C++ : règles de transmission des paramètres dans les expressions lambda

Explication détaillée des paramètres de fonction C++ : règles de transmission des paramètres dans les expressions lambda

WBOY
WBOYoriginal
2024-04-26 15:54:01545parcourir

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.

C++ 函数参数详解:lambda表达式中参数传递的规则

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 :

  • Par valeur : Par défaut, les paramètres sont passés par valeur Passive, ce qui signifie que toute modification de la valeur d'origine ne sera pas reflétée dans la portée externe.
  • Par référence : Utilisez la liste de capture [&] ou [=] pour capturer la référence du paramètre, et vous pouvez transmettre le paramètre par référence. [&][=] 捕获列表捕获参数的引用,可以按引用传递参数。
  • By Move: 对于可移动类型,使用 &&
Par déplacement :

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

Conclusion🎜🎜Comprendre les règles de transmission de paramètres dans les expressions lambda est crucial pour les utiliser efficacement. En transmettant correctement les paramètres, vous pouvez modifier les variables internes ou optimiser les performances selon vos besoins. 🎜

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