草庐IT

lambda-calculus

全部标签

c++ - 在通用 lambda 中使用 `if constexpr` 访问成员类型需要两个分支的格式都正确 - gcc 与 clang

考虑两个具有不同成员类型别名的struct:structfoo{usingx=int;};structbar{usingy=float;};在template上下文中给定一个T,我想获得T::x或T::y取决于T是什么:templateautos(){autol=[](autop){ifconstexpr(p){returntypenameT::x{};}else{returntypenameT::y{};}};returnl(std::is_same{});}intmain(){s();}g++编译上面的代码,而clang++产生这个错误:error:notypenamed'y'in

c++ - 为什么我会收到未使用的 lambda 捕获警告?

我正在传递一个带有初始化捕获循环计数器的lambda,如下所示:#includeautosq(intc,intx){returnc*x*x;}structS{templatevoidfor_each(Funfun)const{for(autoi=1;i对于高达7.0SVN的g++和高达3.9.1的clang++,这一切都可以无警告地编译。但是,对于clang++5.0SVN,我得到了prog.cc:18:20:warning:lambdacapture'i'isnotrequiredtobecapturedforthisuse[-Wunused-lambda-capture]s.for

c++ - 为什么我会收到未使用的 lambda 捕获警告?

我正在传递一个带有初始化捕获循环计数器的lambda,如下所示:#includeautosq(intc,intx){returnc*x*x;}structS{templatevoidfor_each(Funfun)const{for(autoi=1;i对于高达7.0SVN的g++和高达3.9.1的clang++,这一切都可以无警告地编译。但是,对于clang++5.0SVN,我得到了prog.cc:18:20:warning:lambdacapture'i'isnotrequiredtobecapturedforthisuse[-Wunused-lambda-capture]s.for

c++ - 为什么 lambda 的调用运算符隐式为 const?

我在下面的函数中有一个小的“lambda表达式”:intmain(){intx=10;autolambda=[=](){returnx+3;};}下面是为上述lambda表达式生成的“匿名闭包类”。intmain(){intx=10;class__lambda_3_19{public:inline/*constexpr*/intoperator()()const{returnx+3;}private:intx;public:__lambda_3_19(int_x):x{_x}{}};__lambda_3_19lambda=__lambda_3_19{x};}编译器生成的闭包“opera

c++ - 为什么 lambda 的调用运算符隐式为 const?

我在下面的函数中有一个小的“lambda表达式”:intmain(){intx=10;autolambda=[=](){returnx+3;};}下面是为上述lambda表达式生成的“匿名闭包类”。intmain(){intx=10;class__lambda_3_19{public:inline/*constexpr*/intoperator()()const{returnx+3;}private:intx;public:__lambda_3_19(int_x):x{_x}{}};__lambda_3_19lambda=__lambda_3_19{x};}编译器生成的闭包“opera

c++ - 将 lambda 表达式传递给 lambda 参数 c++11

我想做这样的事情:intmain(){autof=[/*somevariables*/](/*takelambdafunction*/){/*somethingwithlambdafunction*/};f([/*othervariables*/](/*variablestobedecidedbyf()*/){/*somethingwithvariables*/});}我知道可以将lambda传递给函数,也可以传递给lambda。以下作品:intmain(){intx=0;inty=0;autof=[x,y](double(func)(int))->double{func(0);ret

c++ - 将 lambda 表达式传递给 lambda 参数 c++11

我想做这样的事情:intmain(){autof=[/*somevariables*/](/*takelambdafunction*/){/*somethingwithlambdafunction*/};f([/*othervariables*/](/*variablestobedecidedbyf()*/){/*somethingwithvariables*/});}我知道可以将lambda传递给函数,也可以传递给lambda。以下作品:intmain(){intx=0;inty=0;autof=[x,y](double(func)(int))->double{func(0);ret

一文搞懂Java中的lambda匿名函数

1Lambda表达式Lambda函数,也称为Lambda表达式,是Java8版本新增的一项功能。它提供了一种简洁的方式来定义小型匿名函数,这些函数可以作为参数传递给其他方法或作为返回值使用。语法:Lambda表达式可以使用这个语法->来表示。示例:零参数:()->expressioninterfacePrintInfo{voidprint();}classTestLambda{staticvoidprintJob(PrintInfoprintInfo){printInfo.print();}publicstaticvoidmain(String[]args){printJob(()->Syst

c++ - Lambda 捕获和成员变量

我在看HerbSutter'stalk在C++和Beyond2012并发session上,他谈到了创建一个非阻塞包装类,他称之为concurrent,带有C++11函数。他的实现相当简单(除了需要一个concurrent_queue,例如Microsoft的PPL中存在的那个):templateclassconcurrent{private:mutableTt;mutableconcurrent_queue>q;booldone=false;std::threadthread;public:concurrent(Tt_=T{}):t{t_},thread{[=]{while(!done

c++ - Lambda 捕获和成员变量

我在看HerbSutter'stalk在C++和Beyond2012并发session上,他谈到了创建一个非阻塞包装类,他称之为concurrent,带有C++11函数。他的实现相当简单(除了需要一个concurrent_queue,例如Microsoft的PPL中存在的那个):templateclassconcurrent{private:mutableTt;mutableconcurrent_queue>q;booldone=false;std::threadthread;public:concurrent(Tt_=T{}):t{t_},thread{[=]{while(!done