概述
今天又学到个c++ 的 lambda 函数,又为匿名函数(就是没有名字的函数),此外c++函数里还可以定义类,呵呵
lambda 大体结构是 [capture](parameters)->return-type{body}
[ ]是指闭包,闭包是指在Lambda函数之外声明的变量,Lambda函数可以引用这些变量,这些变量的集合叫做闭包。在[ ]里面可以定义变量是按值或这引用来捕获。捕获的含义就是:按照什么类型来获取的变量。即使没有引用外部变量,也不能省略。
( )是指Lambda函数中用到的参数,这些参数是Lambda函数自己定义的局部变量。没有自定义的参数,可以省略。
return-type:是值Lambda函数运行完后,返回值的类型。如果没有返回值,可省略不写。
{body}:Lambda函数操作主体。
如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:
[capture](parameters){body}
[] //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y] //x 按值捕获, y 按引用捕获.
[&] //用到的任何外部变量都隐式按引用捕获
[=] //用到的任何外部变量都隐式按值捕获
[&, x] //x显式地按值捕获. 其它变量按引用捕获
[=, &z] //z按引用捕获. 其它变量按值捕获
例子:
void SendTest() {
Sleep(2000);
for (uint32_t i = 0; i < 100000; i++) {
std::string context{ std::to_string(i) };
}
class TT { //c++ 中可以在函数中定义类。。。牛皮
};
}
typedef enum
{
add = 0,
sub,
mul,
divi
}type;
int main()
{
int a = 10;
int b = 20;
auto func = [=](type i)->int { //lambda 函数 如果 []中没=号,则不能使用a,b外部变量
switch (i)
{
case add:
return a + b;
case sub:
return a - b;
case mul:
return a * b;
case divi:
return a / b;
}
};
std::cout << func(sub) << std::endl;
auto add = [=](int a, int b)->int { //lambda
return a + b;
};
std::cout << add(100, 101) << std::endl;
auto z = [=] { int k = a * b; for (int i = 0; i < 100; ++i) {
k += i;
}
return k; };
std::cout << z() << std::endl;
system("pause");
return 0;
}
最后
以上就是爱撒娇羽毛为你收集整理的c++ lambda函数与函数中的类的全部内容,希望文章能够帮你解决c++ lambda函数与函数中的类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复