通过代码看匿名函数的几种实现方式:
#include <iostream>
using namespace std;
//匿名函数的基本语法为
//[捕获列表](参数列表)->返回类型{函数体}
void test1()
{
auto Add = [](int a, int b)->int {
return a + b;
};
std::cout << Add(1, 2) << std::endl; //输出3
}
//一般情况下,编译器可以自动推断出lambda表达式的返回类型,所以我们可以不指定返回类型
//[捕获列表](参数列表){函数体}
void test2()
{
auto Add = [](int a, int b) {
return a + b;
};
std::cout << Add(1, 2) << std::endl; //输出3
}
void test3()
{
int c = 12;
auto Add = [c](int a, int b)->int { //捕获列表加入使用的外部变量c,否则无法通过编译
return c;
};
std::cout << Add(1, 2) << std::endl;
}
void test4()
{
int c = 12;
auto Add = [c](int a, int b)->int { //捕获列表加入使用的外部变量c,否则无法通过编译
// c = a; // 编译报错
return c;
};
std::cout << Add(1, 2) << std::endl;
}
void test5()
{
int c = 12;
auto Add = [&c](int a, int b)->int { //捕获列表加入使用的外部变量c,否则无法通过编译
c = a; // 编译报错
return c;
};
std::cout << Add(1, 2) << std::endl;
}
int main()
{
cout << "Hello World!" << endl;
return 0;
}
用法总结如下:
1 [捕获列表](参数列表)->返回类型{函数体}****这个信息较多,方便查阅,优先这个
2 [捕获列表](参数列表){函数体}
其特点:
捕获列表默认传递右值;加&传递左值,共享内存
参数列表一般只传参数,不传变量,方便管理