草庐IT

c++ - 如何编写丢弃其参数的通用可变参数 lambda?

我想编写一个lambda,它通过通用引用接受任意数量的参数并完全忽略它们。显而易见的方法是使用可变通用参数包的语法并省略参数名称:automy_lambda=[](auto&&...){return42;};在我trytopassanontrivially-copyableobject之前这工作正常(使用gcc4.9.2):structS{S(){}S(Sconst&){}};my_lambda("meow",42,S{});^error:cannotpassobjectsofnon-trivially-copyabletype'structS'through'...'这是怎么回事?我

c++ - 编译器无法推断返回类型?

我正在尝试在自动函数上使用decltype关键字:structThing{staticautofoo(){return12;}usingtype_t=decltype(foo());};我得到以下错误(gcc7.4)::6:25:error:useof'staticautoThing::foo()'beforedeductionof'auto'decltype(foo());^:6:25:error:useof'staticautoThing::foo()'beforedeductionof'auto'为什么编译器还没有推导出返回类型? 最佳答案

c++ - std::max 与 lambda 和 auto

C++11难道不能做到这一点吗?使用当前的clang编译器(OSX10.8上的Xcode5)无法编译:std::max_element(group->GetComponents().begin(),group->GetComponents().end(),[](autoa,autob){returna.length>b.length;});错误信息是:Stuff.cp:68:40:函数原型(prototype)中不允许使用“auto” 最佳答案 在C++1y中你有通用的lambda,所以语法将在clang3.5中编译。.lambda

c++ - 以下哪一项是 "auto"推导指针类型的更正确方法?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion(非常基本的问题:)我发现以下两种方式都生成int*类型。我可以知道哪个更合适吗?inti=42;autoa=&i;auto*b=&i;(我试图将指针示例与引用示例相关联:autoc=i;和auto&d=i;。但似乎类比在这里不起作用.)编辑:我还发现另一个(密切相关的)例子很奇怪:autoi=42,p=&i;//failsatcompilationautoi=42,*p=&i;//pas

c++ - C++中的自动引用

这段代码在visualstudio2015中给我奇怪的调试信息intmain(){constinti=42;autoj=i;constauto&k=i;auto*p=&i;constautoj2=i,&k2=i;}生成的类型是:&k=constint&&k2=constint*我认为它们都应该是constint&。问题是,为什么我的VisualStudio调试器说&k和&k2是不同的类型? 最佳答案 k和k2都是constint&类型。这是完整的类型列表。请注意,顶级const为auto丢弃类型推导。intmain(){consti

c++ - &&、基于范围的循环和临时变量如何协同工作?

我看到下面的代码here.描述说:Wecanalsocaptureasaforwardingreferenceusingauto&&.Thatis,auto&&willresolvetoauto&forlvaluereferences,andauto&&forrvaludreferences.Hereisanexampleofcapturingtheoutputfromarange-basedforloopoveratemporarymap.如果引用的值是左值(因此在这种情况下没有衰减),我确实理解auto&&到auto&的衰减。我苦苦挣扎的是了解临时map、基于范围的for循环和移动

c++ - 我如何从我的 maybe<> monad 中获取值(value)?

出于教育原因,我正在尝试在C++14中实现一个maybemonad。我(也许过于简单化)对monad的理解是,它们允许您将计算定义为一系列可组合的函数调用。维基百科关于monad的文章称它们为“可编程分号”,因为它们可以让您定义在一组谨慎的函数调用之间发生的事情。maybemonad是一个在发生故障时中断计算的monad。templatestructmaybe{maybe(constT&t):argument(t),valid(true){}maybe():argument(),valid(false){}Targument;boolvalid;};templatemaybejust(

c++ - 引用函数按值返回和自动

根据我的理解,当您将变量定义为对按值返回的函数的引用时,您实际上拥有对生命周期绑定(bind)到该引用的临时对象的引用,并且您必须将该引用声明为常量。话虽这么说,为什么不将临时定义为const,以便下面示例中的a2自动成为const?如果不允许将非常量引用绑定(bind)到该临时对象,那么为什么不默认使临时对象本身const呢?保持它非常量的原因是什么?#includestd::stringgetStringA(){std::stringmyString="SomeString";returnmyString;}conststd::stringgetStringB(){std::str

c++ - 使用 constexpr 或模板元编程简化较长的展开循环表达式

看起来我有一个更长的表达式(展开的循环),例如下面的代码在一个软件中多次膨胀了数千行。由于poly为性能采用模板参数(第二个参数对应于循环z值),我想知道是否可以通过模板元编程简化下面的代码并通过递归构建类似于循环的东西。表达式的语法似乎是每个x=bx(a+b+c*by*bz)+..我想,如果poly不是模板函数,而是采用函数参数,那会更容易一些。voidcalc(floatmat[3][3][3],floatfS,floatfT,floatfU){constfloatbs20_u=poly(fU);constfloatbs21_u=poly(fU);constfloatbs22_u=

c++ - 自动返回函数和模板实例化

在编写一些模板代码时,我遇到了可以减少为以下错误。templateautobar(){returnN;}intmain(int,char*[]){autofoo=[](autofunc){returnfunc();};foo(bar);}错误是:unresolved_overload.cpp:Infunction'intmain(int,char**)':unresolved_overload.cpp:26:28:error:nomatchforcallto'(main(int,char**)::)()'std::cout)constexprmain(int,char**)::::op