C++ lambda 表达式
网上文章很多,这几简化说明:
[ ]:中括号中: from:C++11新特性:Lambda函数(匿名函数) - DoubleLi - 博客园
下面是各种变量截取的选项:
- [] 不截取任何变量
- [&} 截取外部作用域中所有变量,并作为引用在函数体中使用
- [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用
- [=, &foo] 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
- [bar] 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
- [this] 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
( ):小括号中,就是函数参数;
lambda表达式可以作为其它函数参数;
1:标准格式:
有箭头 ->, 就要显示写明返回值类型;
auto pfunc1 = [this]() -> void { MessageBox(L"1"); };
pfunc1();
2:简化格式:
void 类型返回值;
没有箭头->,会默认检测返回值类型;
auto pfunc2 = [this](){ MessageBox(L"2"); };
pfunc2();
3:简化格式:
int 类型返回值;
没有箭头->,会默认检测返回值类型;
auto pfunc3 = [this]() { MessageBox(L"3"); return 1; };
pfunc3();
4: 最简化格式:
内有参数的方法;没有();
[]{}
[] { printf("hello world!"); }
[] 不获取变量;
{} 函数内容;
C++ 中的 Lambda 表达式 | Microsoft Learn
https://learn.microsoft.com/zh-cn/cpp/cpp/lambda-expressions-in-cpp?view=msvc-170