深入理解C++ lambda捕获机制

   2024-10-07 9720
核心提示:在C++中,lambda表达式是一种匿名函数,可以在函数内部定义并使用,而不需要单独声明函数。lambda表达式可以捕获外部作用域的变

在C++中,lambda表达式是一种匿名函数,可以在函数内部定义并使用,而不需要单独声明函数。lambda表达式可以捕获外部作用域的变量,以便在lambda函数体内使用。

在lambda表达式中,可以使用以下方式来捕获外部变量:

按值捕获:通过值传递方式捕获外部变量,lambda函数内部可以修改外部变量的副本,但不会影响外部变量本身。按引用捕获:通过引用传递方式捕获外部变量,lambda函数内部可以修改外部变量的值,会直接影响外部变量本身。按引用捕获(mutable):通过引用传递方式捕获外部变量,但在lambda函数内部可以修改外部变量的值,不会影响外部变量本身。

示例代码:

#include <iostream>int main() {    int x = 10;    int y = 20;    // 按值捕获    auto lambda1 = [x, y]() {        std::cout << "x: " << x << ", y: " << y << std::endl;    };    // 按引用捕获    auto lambda2 = [&x, &y]() {        x = 100;        y = 200;        std::cout << "x: " << x << ", y: " << y << std::endl;    };    // 按引用捕获(mutable)    auto lambda3 = [&x, &y]() mutable {        x = 100;        y = 200;        std::cout << "x: " << x << ", y: " << y << std::endl;    };    lambda1();    lambda2();    lambda3();    std::cout << "x: " << x << ", y: " << y << std::endl;    return 0;}

在上面的示例代码中,我们定义了三个lambda表达式,分别按值捕获、按引用捕获和按引用捕获(mutable)外部变量x和y。通过调用这些lambda表达式,我们可以看到它们对外部变量的影响不同。lambda1只读取外部变量的值,不会影响外部变量本身;lambda2和lambda3修改了外部变量的值,会影响外部变量本身。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号