C++——lambda表达式

1.举例

最近遇到一个问题,源代码有点类似

int testClass::test()
{
    auto getNum = [this](int a, int b)
    {
        return (a-b);
    };
    
    int c = getNum(5, 4);
    return c;
} 

其等价于

int testClass::test()
{
    int anonymous_function(int a, int b)
    {
        return (a-b);
    }
    
    auto getNum = anonymous_function;    

    int c = getNum(5, 4);
    return c;
} 

2.lambda表达式与闭包函数

[](int x,int y) –>int {return x * y;};[]是lambda表达式的引入符(后面会解释这个引入符的),由于是匿名函数,所以就没有名字。()表示参数列表。int是lambda表达式的返回值。{}里面是函数体。当lambda表达式函数体语句很简单时,可以不指定返回值,此时将会制动推断返回值。这条语句制定了返回值为int类型。所以它的值变成了3,而不是3.33。 引入lambda表达式的语法: int val = 3; auto lambda = [&]() -> int { return val * 100; }; cout << lambda() << endl;使用关键字auto即可。在这个例子中我们注意到方括号内有个“&”,这个方括号和其内部的符号共同构成了lambda表达式的引入符。这个引入符可以获取和它相同范围内的变量的值。

 [] // 不捕获任何外部变量 

    [=] // 以值的形式捕获所有外部变量 

     [&] // 以引用形式捕获所有外部变量 

     [x, &y] // x 以传值形式捕获,y 以引用形式捕获 

     [=, &z]// z 以引用形式捕获,其余变量以传值形式捕获 

     [&, x] // x 以值的形式捕获,其余变量以引用形式捕获 当以值的形式捕获时,我们不能修改原变量的值,当以引用形式捕获时,我们的操作可以改变变量的值。

 

Lambda表达式的参数列表和函数的参数列表类似,但是又有所不同,具体表现为——

  1. 不支持默认参数列表
  2. 不支持可变参数列表
  3. 所有参数必须有参数名

相同之处在于,Lambda表达式的参数列表同样可以作为局部变量看待,能够覆盖同名的全局变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值