c++lambda函数学习笔记

//Lambda 函数与表达式
//C++11 提供了对匿名函数的支持, 称为 Lambda 函数(也叫 Lambda 表达式)。
//Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,
// 比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。
//Lambda 表达式本质上与函数声明非常类似。

#include
using namespace std;
class test
{
public:
void hello() {
cout << “test hello!n”;
};
void lambda() {
auto fun = [this] { // 捕获了 this 指针
this->hello(); // 这里 this 调用的就是 class test 的对象了
};
fun();
}
};
int main()
{
int i = 0;
auto a = [](int a, int b)->int {return a + b; };
auto a2 = [=] {cout << i; };//将所有外部变量拷贝一份到lambda函数内部,注意变量名一致
auto a3 = [=, &i] {cout << “” << i++; };//复制并引用i
auto a4 = [&i] {cout << i; };//引用i
int sum = a(1, 2);
cout << sum << endl;
a2();
a3();
a4();
// [] :默认不捕获任何变量;
// [=]:默认以值捕获所有变量;
// [&]:默认以引用捕获所有变量;
// [x]:仅以值捕获x,其它变量不捕获;
// [&x]:仅以引用捕获x,其它变量不捕获;
// [=, &x]:默认以值捕获所有变量,但是x是例外,通过引用捕获;
// [&, x]:默认以引用捕获所有变量,但是x是例外,通过值捕获;
// [this]:通过引用捕获当前对象(其实是复制指针);
// [*this]:通过传值方式捕获当前对象;
//lambda表达式无法修改通过复制形式捕捉的变量,因为函数调用运算符的重载方法是const属性的。
//有时候,你想改动传值方式捕获的值,那么就要使用mutable,
//auto add_x = [x](int a) mutable { x *= 2; return a + x; }; // 复制捕捉x
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值