C++ lambda

C++11 的 lambda 表达式规范如下:

[capture](parameters) mutable exception attribute ->retury-type {statement}


其中, 

mutable 修饰符说明 lambda 表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获对象的 non-const 方法。

exception 说明 lambda 表达式是否抛出异常(noexception),以及抛出何种异常,类似于void f() throw(X, Y)

attribute 用来声明属性。

capture 捕捉列表, 能够访问一些上下文中的数据以供Lambda函数使用, 可以有以下集中形式:

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

[a]  // 以值的形式捕捉外部变量a

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

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

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

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

[&, x]   // x 以值的形式捕获,其余变量以引用形式捕获

[this] 捕获当前类中的this指针,如果已经使用了&或者=就默认添加此选项

#include <iostream>
int main() {

    int n = 100;
    auto f = [n](int k) { return n + k ; };
    std::cout << f(3) << endl;

    auto b = 3;
    auto b2 = [n, &b] (int c) -> int{ // n只读, b读写
        b = c*2;
        return n + c;
    }(1000);

    std::cout << n << std::endl;
        std::cout << b << std::endl;
    std::cout << b2 << std::endl;

//int sum = 10;
//cout << [&](int n) { return sum += n * n;}(10);
//cout << "\n";
//cout << sum;
//
//cout << "\n";
//int t = 1;
//cout << [=](int n) mutable { return t += n * n;}(10);
//cout << "\n";
//cout << t;
//
//cout << "\n";
//int a = 3, b = 4;
//cout << [=, &b](int n) { return b += n * n + a;}(10);
//cout << "\n";
//cout << b;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值