Lamada表达式

Lamada

以往C++需要传入一个函数的时候,必须事先进行声明,视情况可以声明为一个普通函数然后传入函数指针,或者声明一个函数对象,然后传入一个对象。而Lamada表达式提供了一个类似匿名函数的特性,即在需要一个函数,而又不想费力去命名一个函数的情况下使用

形式:

[捕获列表(函数对象参数)](参数列表) mutable或exception声明(可选) -> 返回类型{
	//函数体
	} 
  • 函数对象参数是传递给编译器自动生成的函数对象类的构造函数的,不能省略;函数对象参数只能使用那些到定义Lamada为止时Lamada所在范围内可见的局部变量(包括Lamada所在类的this)

值捕获
与参数传值类似,值捕获的前期是变量可以拷贝,不同之处则在于,被捕获的变量在 lambda 表达式被创建时拷贝,而非调用时才拷贝

void learn_lambda_func_1() {
    int value_1 = 1;
    auto copy_value_1 = [=] {
        return value_1;
    };
    value_1 = 100;
    auto stored_value_1 = copy_value_1();
    // 这时, stored_value_1 == 1, 而 value_1 == 100.
    // 因为 copy_value_1 在创建时就保存了一份 value_1 的拷贝
}

引用捕获
与引用传参类似,引用捕获保存的是引用,值会发生变化。

void learn_lambda_func_2() {
    int value_2 = 1;
    auto copy_value_2 = [&] {
        return value_2;
    };
    value_2 = 100;
    auto stored_value_2 = copy_value_2();
    // 这时, stored_value_2 == 100, value_1 == 100.
    // 因为 copy_value_2 保存的是引用
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值