c++教程:匿名函数

2025-10-09 08:34:51

1、匿名函数的基本语法为:[ 捕捉的值 ]( 参数 )->返回值 {  代码 }

例如

#include <iostream>

using namespace std;

int main()

{

    auto f = [](int a, int b)->int { return a+b;  };

    cout << f(1,2);

    return 1;

}

c++教程:匿名函数

2、什么是捕获的值那?我们逐条来介绍:

[ ] 试图在Lambda内使用任何外部变量都是错误的.

例如:

    int c = 1;

    auto f = [](int a, int b)->int { 

        a = c;

       return a+b;  

    };

    cout << f(1,2);

这个例子是编译不过的。

c++教程:匿名函数

3、[&]  用到的任何外部变量都隐式按引用捕获

#include <iostream>

using namespace std;

int main()

{

    int c = 1;

auto f = [&](int a, int b)->int { 

a = c;

c = 2;

return a+b;  

};

    cout << f(1,2) <<"," << c << endl;

    return 1;

}

这个例子编译过了,但是c的值被修改了。

c++教程:匿名函数

4、[=]  用到的任何外部变量都隐式按值捕获

例如:

#include <iostream>

using namespace std;

int main()

{

    int c = 1;

auto f = [=](int a, int b)->int { 

a = c;

c = 2;

return a+b;  

};

    cout << f(1,2) <<"," << c << endl;

    return 1;

}

给赋值会报错

c++教程:匿名函数

5、[=, &c]   c按引用捕获. 其它变量按值捕获

#include <iostream>

using namespace std;

int main()

{

    int c = 1;

    auto f = [=,&c](int a, int b)->int { 

        a = c;

        c = 2;

        return a+b; 

};

    cout << f(1,2) <<"," << c << endl;

    return 1;

}

c++教程:匿名函数

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢