lambda表达式是一个可调用对象。
lambda表达式定义:
看作一个匿名函数。定义lambda,[ ]开始,跟(),括号内传递参数 ,{ }内接函数体。用一个auto 类型的变量接收。把该变量名当作该匿名函数的函数名。
捕捉列表
在lambda函数体内部,可调用全局函数。
[ ]捕捉列表中可以填入已定义的变量,然后在函数体中直接使用。捕捉的变量传入函数体内带有const属性不可以修改。mutable关键字可以去除捕捉列表中的变量的const属性:
1 #include <iostream>2 3 int main()4 {5 6 double rate =0.05;7 auto mission =[rate](int a,int b) mutable {rate =10.0 ;return (a+b)*rate;};8 9 std::cout<<mission(8,8)<<std::endl;10 11 return 0;12 }
lambda底层是一个仿函数。定义一个表达式实际上编译器生成了一个类,类型名是:
一长串的字符符串叫做uuid。每个lambda在程序每次运行时生成。
每个lambda可以看成一个仿函数的对象,没办法知道这个仿函数的类名,所以返回值用auto类型的变量接收,让其自动推导。
定义仿函数和lambad,比较二者底层的汇编:
二者底层上一致,lambda底层就是仿函数。