『C++11』lambda表达式

发布于:2023-01-21 ⋅ 阅读:(531) ⋅ 点赞:(0)

目录

语法:

常见用法:


语法:
 

[] ()->ret{

std::cout<<"hello world"<<std::endl;

return 1;

}();
  • [ ] : 捕获列表,表示lambda可以访问前文的那些变量C++14中,添加了可以在捕获列表中直接声明变量的语法 [a = 10 ], 不需要也不能制定变量类型,会自动推导。
  • ( ) :参数列表,用法与普通函数一致。
  • ->ret :返回值类型,可以不写,会自动推导。
  • { } : 函数体,用法与普通函数一致。
  • () : 表示对该lambda表达式的调用。
捕获列表
参数 意义
[空] 表示不捕获任何变量
[=] 表示捕获所有变量
[&] 表示按照引用捕获所有变量
[ = ,&i] 表示变量I用引用传递,除i的所有变量用值传递
[&,i] 表示变量i用值传递,除i的所有变量用引用传递
[i] 表示以捕获值的方式捕获变量i
[&i] 以引用的方式捕获i

常见用法:

1. 给回调函数做参数,回调函数详见 『C++』回调函数_顽張先生的博客-CSDN博客

using pf_type = void(*)(int);  //定义函数指针

void myFunc(pf_type pf ,int i){ //myFunc函数传入一个函数,和一个整形.

​	pf(i); //传入的整形变量作为传入函数的参数.

}

myFunc([] (int i){  //将lambda表示式作为参数传入函数。

cout<<"lambda"<<endl;
cout<<"i"<<endl;

},200);

2.简化代码

lambda实质是重载了()的类,所以我们可以用他来代替重载()所做的事,起来简化代码的作用。

#不使用lambda表达式重载()效果

//不使用lambda表达式所要重载()的效果,显得代码冗余
class Test
{
public:
    int operator()(int a ,int b ) //该类重载了()
    {
        return a * b;
    }
};

test01()
{
    Test test;
    cout<<"10 * 20 = "<<test(10,20)<<endl;
}

#使用lambda表达式效果:

//使用lambda表达式简化代码,是不是清新许多.
test02()
{
    auto test_ = [](int a,int b ){return a*b ;};
    cout<<"10 * 20 = "<<test_(10,20) << endl; 
}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到