草庐IT

lambda-wrapped

全部标签

C++11 lambda 返回 lambda

这段代码对于JS开发者来说并不陌生functionget_counter(){return(function(){varc=0;returnfunction(){return++c;};})();}它基本上创建了一个创建不同枚举数的。所以我想知道是否可以在C++11中使用新的lambda语义来完成同样的事情?我最终写了这段C++不幸的是不能编译!intmain(){intc;autoa=[](){intc=0;return[&](){cout所以我想知道是否有一种解决方法来编译它,以及编译器如何使这段代码正确运行?我的意思是它必须创建单独的枚举器,但它也应该收集垃圾(未使用的c变量)。

c++ - 将 lambda 传递给函数模板

我正在学习C++,我正在尝试实现一个二进制搜索函数,该函数可以找到谓词所包含的第一个元素。该函数的第一个参数是一个vector,第二个参数是一个计算给定元素的谓词的函数。二分查找函数如下所示:templateintbinsearch(conststd::vector&ts,bool(*predicate)(T)){...}如果像这样使用,这将按预期工作:boolgte(intx){returnx>=5;}intmain(intargc,char**argv){std::vectora={1,2,3};binsearch(a,gte);return0;}但是如果我使用lambda函数作为

c++ - 将 lambda 传递给函数模板

我正在学习C++,我正在尝试实现一个二进制搜索函数,该函数可以找到谓词所包含的第一个元素。该函数的第一个参数是一个vector,第二个参数是一个计算给定元素的谓词的函数。二分查找函数如下所示:templateintbinsearch(conststd::vector&ts,bool(*predicate)(T)){...}如果像这样使用,这将按预期工作:boolgte(intx){returnx>=5;}intmain(intargc,char**argv){std::vectora={1,2,3};binsearch(a,gte);return0;}但是如果我使用lambda函数作为

c++ - []<typename>(){} 是有效的 lambda 定义吗?

因为anotherquestion,我正在试验lambda和编译器在这里。我刚刚意识到(这确实很正常)以下代码是有效的:intmain(){autol=[](){};l.operator()();}实际上标准说闭包类型有一个公共(public)的内联函数调用运算符等等,因此能够调用它是有意义的。通过查看标准(嗯,工作草案)我无法解释的是GCC(6.1)编译了以下代码段(clang3.9没有):intmain(){autol=[](){};l.operator()();}没有警告,没有错误。它是有效代码还是应该被编译器拒绝? 最佳答案

c++ - []<typename>(){} 是有效的 lambda 定义吗?

因为anotherquestion,我正在试验lambda和编译器在这里。我刚刚意识到(这确实很正常)以下代码是有效的:intmain(){autol=[](){};l.operator()();}实际上标准说闭包类型有一个公共(public)的内联函数调用运算符等等,因此能够调用它是有意义的。通过查看标准(嗯,工作草案)我无法解释的是GCC(6.1)编译了以下代码段(clang3.9没有):intmain(){autol=[](){};l.operator()();}没有警告,没有错误。它是有效代码还是应该被编译器拒绝? 最佳答案

c++ - 捕获此的 lambda 的访问权限

考虑以下代码:#includestructtest{voidpublic_test(){[this](){private_test();}();}private:voidprivate_test(){std::coutlambda捕获它,然后调用捕获对象的私有(private)方法。现在,此代码使用VC++2012编译和工作(打印test)。虽然这是非常直观和有用的行为,但我想知道这是否可以保证按标准工作。因此,lambda是否可以私有(private)访问通过this捕获的任何对象?我试图通过5.1.2[expr.prim.lambda]在标准阅读中查找这个问题,但无法真正找到明确的

c++ - 捕获此的 lambda 的访问权限

考虑以下代码:#includestructtest{voidpublic_test(){[this](){private_test();}();}private:voidprivate_test(){std::coutlambda捕获它,然后调用捕获对象的私有(private)方法。现在,此代码使用VC++2012编译和工作(打印test)。虽然这是非常直观和有用的行为,但我想知道这是否可以保证按标准工作。因此,lambda是否可以私有(private)访问通过this捕获的任何对象?我试图通过5.1.2[expr.prim.lambda]在标准阅读中查找这个问题,但无法真正找到明确的

c++ - 在 lambda 函数中捕获和传递参数之间的区别

我了解lambda函数及其在c++11中的用途。但我不明白“捕获值”和“传递参数”之间的区别。比如……#include#includeusingnamespacestd;intadd(inta,intb){returna+b;}intmain(intargc,char**argv){functioncppstyle;cppstyle=add;autol=[](functionf,inta,intb){returnf(a,b);};cout上面代码的输出和下面的代码是一样的..#include#includeusingnamespacestd;intadd(inta,intb){retu

c++ - 在 lambda 函数中捕获和传递参数之间的区别

我了解lambda函数及其在c++11中的用途。但我不明白“捕获值”和“传递参数”之间的区别。比如……#include#includeusingnamespacestd;intadd(inta,intb){returna+b;}intmain(intargc,char**argv){functioncppstyle;cppstyle=add;autol=[](functionf,inta,intb){returnf(a,b);};cout上面代码的输出和下面的代码是一样的..#include#includeusingnamespacestd;intadd(inta,intb){retu

c++ - 为什么在直接初始化和赋值中传递 lambda 而不是复制初始化时会编译?

为什么赋值运算符不允许在声明对象的同一行中使用lambda表达式?它似乎在MSVC中工作。测试代码:https://godbolt.org/g/n2Tih1classFunc{typedefvoid(*func_type)();func_typem_f;public:Func(){}Func(func_typef):m_f(f){}Funcoperator=(func_typef){m_f=f;return*this;}};intmain(){//doesn'tcompileinGCCandclang,itdoesinMSVCFuncf1=[](){};//compiles!Funcf