c++ lambda表达式

引入

lambda表达式也有人称之为匿名函数,能够在任何作用域下快速定义一个函数

下面这行代码就是一个最简单的lambda表达式,最后输出为3

auto f = [](int x , int y)->int{return x+y;};
cout<<f(1,2);

我们来解析一下lambda表达式

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

//[] : 捕获列表,当前为空表示不捕获外围的变量
//(int x , int y): 参数列表。在c++14中可以用auto自动推测参数的类型
//->int : 返回值类型为int,编译器能根据返回值自动推测返回值类型所以可省略
//{return x+y} : 作用域,也是函数的主体

捕获列表

int main()
{
    int n = 10,m = 100;
    auto f = [n , &m](auto x) //n是按值捕获,此时n是只读的(read-only)不可修改变量的值
    {                         //m是引用捕获,可以修改变量的值
        m  = 20;
        return n*x;
    };
    
    std::cout<<f(10)<<std::endl;  //输出100
    std::cout<<m<<std::endl;      //输出20
    return 0;
}

此外

[&] : 引用捕获所有封闭范围中(所处的作用域中)的变量
[=] :  按值捕获所有封闭范围中(所处的作用域中)的变量

在c++14后还可以在捕获语句中定义新的变量

    auto f = [n , &m , k = 5](auto x)
    {
        m  = 20;
        return n*x;
    };
posted @ 2024-03-07 20:21  拾墨、  阅读(4)  评论(0编辑  收藏  举报