图书馆网站的建设的重要性,网站开发和 app开发的区别,网站特点怎么写,网站后台系统使用点击上方“蓝字”#xff0c;发现更多精彩。本文在前一篇关于函数对象、bind 函数的基础上#xff0c;对 C 中 lambda不表达式的使用进行总结。lambda01PART定义一个 lambda 表达式表示一个可调用的代码单元#xff0c;可以理解为是一个未命名的内敛函数。类似任何函数… 点击上方“蓝字”发现更多精彩。本文在前一篇关于函数对象、bind 函数的基础上对 C 中 lambda不表达式的使用进行总结。lambda01PART定义一个 lambda 表达式表示一个可调用的代码单元可以理解为是一个未命名的内敛函数。类似任何函数一个 lambda 具有返回类型、参数列表和函数体和普通函数不同 lambda 必须使用尾置返回来指定返回类型。①捕获列表捕获列表是一个 lambda 所在函数中定义的局部变量的列表捕获列表能够捕捉上下文中的变量以供 lambda 使用。捕获列表可以为空但 [] 不可以省略编译器依次来判断接下来的代码是否是 lambda 表达式。②参数列表和普通函数的参数列表一致如果不需要参数传递则可以连同括号 () 一起省略。lambda 中参数不能有缺省值也不能有无名参数。③mutable默认情况下对于一个值被拷贝的变量lambda 不会改变其值加上 mutable 修饰符后可以修改传递进来的拷贝。在使用 mutable 修饰符时参数列表部分不可省略但列表可以为空。④返回类型标识函数返回值的类型当返回值为 void或者函数体中只有一处 return 时可用省略。⑤函数体标识函数的实现内容与普通函数一样不过除了可以使用参数之外还可以使用所有捕获的变量。函数体不能省略但函数体可以为空。02PART捕获列表①概念一个 lambda 通过将局部变量包含在其捕获列表中来指定将会使用这些变量只能使用明确指明的变量变量捕获方式可以传值捕获也可以传引用捕获。②按值捕获变量在捕获列表中指定变量名字类似传值的参数被捕获的变量值将在 lambda 创建时被拷贝。③按引用捕获变量用 引用捕获一个以引用方式捕获的变量在 lambda 中被使用时实际上使用的引用所绑定的对象。④多参数捕获捕获列表中可以指定捕获多个参数并且可以为每个参数指定捕获方式。⑤隐式按值捕获使用 [] 表示按值捕获 lambda 所在范围内所有可见的局部变量。⑥隐式按引用捕获使用 [] 表示按引用方式捕获 lambda 所在范围内所有可见的局部变量。⑦隐式混和捕获使用 [,prams] 表示除 xxx 按引用捕获外其他所有参数按值捕获使用 [,prams] 表示除 xxx 按值捕获外其他所有参数按引用捕获。04PART指定返回类型如果一个 lambda 函数体包含了 return 之外的任何语句则编译器假定返回类型为 void此时我们必须指定返回值类型。05PARTlambda 是函数对象定义一个 lambda 编译器会生成一个与 lambda 对应的新的类类型。当向一个函数传递一个 lambda 时同时定义了一个新类型和该类型的一个对象生成的类包含所捕获变量对应的数据成员数据成员在类创建时被初始化。int sum 0;std::vectorint vec { 1,2,3,4,5 };std::for_each(begin(vec), end(vec), [sum](int x){sum x;});上述代码被编译器翻译后变为class lambda_b{private: int* m_pSum;public: lambda_b(int* pSum) { m_pSum pSum; } void operator()(int x) const { *m_pSum x; }};int sum 0;std::vectorint vec { 1,2,3,4,5 };std::for_each(begin(arry), end(arry), lambda_b(sum));06PARTlambda 使用lambda 表达式实际为一个函数对象可以把匿名函数保存在变量当有名函数来使用。①使用 auto 保存int a 1;int b 2;//使用 auto 保存 lambda auto func [a, b](int c)mutable -int { b a c; return a; };//做有名函数使用 cout b func(10) endl;②函数指针保存当 lambda 的捕获外部变量列表为空时可使用普通函数指针来保存。//使用函数指针保存 lambda int(*func1)(int) [](int x) {return x; };//函数调用int a func1(20);③使用 std::function 模板类型#include std::functionfloat(int,float) fun1 [](int x, float y) { return x y; };float a fun1(12,1.2);//函数调用函数对象C 可调用对象(一)扫码关注持续获取最新文章c学习 算法与数据结构