有哪些推广的网站,重庆网站优化指导,百度权重高的网站有哪些,网站假网站这么做lambda表达式浅析【C学习笔记】
基本用法:
auto f [/*捕获列表*/](/*参数*/)-int /*后置返回值类型*/{/** 函数体*/};捕获列表: [] : 不捕获任何变量 [变量名] : 表示值捕获,不可修改 [] :按值捕获所有变量,不可修改 [] : 按引用捕获可以修改 [this] : 在类中捕…lambda表达式浅析【C学习笔记】
基本用法:
auto f [/*捕获列表*/](/*参数*/)-int /*后置返回值类型*/{/** 函数体*/};捕获列表: [] : 不捕获任何变量 [变量名] : 表示值捕获,不可修改 [] :按值捕获所有变量,不可修改 [] : 按引用捕获可以修改 [this] : 在类中捕获,捕获当前类的this指针,如果使用 捕获,则默认捕获this指针 [ 变量名] :按引用捕获该变量 [ , 变量名] ; 按值捕获所有变量,但是按引用捕获变量名变量,按引用捕获的变量,每个前面都有写一个 [ ,变量名] : 按引用捕获所有变量,但是按值捕获变量名变量
lambda表达式延迟调用易错点
int a 12;auto f []() -int {return a;};a 99;cout f() endl;输出: 为什么输出不是99呢?
因为在遇到auto f []() -int这一行时,a的值就已经被复制到lambda表达式中了
要避免这个错误可以使用按引用捕获
lambda表达式类型
lambda表达式是闭包类型,可以理解成函数中的函数
编译器会为每个lambda表达式生成一个类,和一个可调用类对象
lambda表达式用法介绍
vectorint vec{ 12,23,435,56,76 };int isnums 9;for_each(vec.begin(), vec.end(), [](int val){val - isnums;});for (auto value : vec){cout value endl;}广义lambda捕获
解决lambda捕获依赖于类对象问题
将m_object复制到闭包里面来
[ temp m_object]()
{return temp;};