草庐IT

c++ - 我什么时候需要使用 std::async(std::launch::async, func()) 而不是 func()?

我不明白使用std::async的原因与std::lauch::async标志,而不是简单地调用传递给std::async的函数.是否有任何特价保证? 最佳答案 根据thedocumentation,是一个只接受函数及其参数的重载。您正在使用接受更具体的策略的重载。async(f,args...)等同于async(std::launch::async|std::launch::deferred,f,args...),其中两个标志的存在将函数是否简单地与当前调用堆栈分离(推迟到第一个非定时等待函数的执行;这称为惰性求值),或者实际上是

c++ - 与 GCC/MSVC 中的 lambda 转换构造函数不一致

哪个(如果不是两个)违反规范?在MSVC2013和MSVCNov2013CTP上尝试使用MSVC,GCC是MinGWx644.9.1with-std=c++11。templateclassmemoizer{usingfunc_type=ret_type(*)(constint);constfunc_typefunc;std::mapcache;public:memoizer(func_typefunc):func(func){}ret_typeoperator[](constintn){constautoit=cache.find(n);if(it!=cache.end())retur

c++ - 什么是 A B::* func() 定义?

一个现已删除的问题与此类似:structA{};structB{Aread();};AB::*read(){returnA{};}这段代码会报错:error:cannotconvert‘A’to‘AB::*’inreturnreturnA{};正如我们所见,这不是read()的类外定义,而是定义了一个返回AB::*的非成员函数.在这种情况下,AB::*到底是什么? 最佳答案 AB::*表示“指向B的数据成员,类型为A。例如:structB{Ax;};...Bb;AB::*ptr=&B::x;//ptristhevariabledec

基类和继承类之间的C++函数重载

考虑下面的例子。我猜想因为func是虚拟的,所以调用哪个实现的决定将在运行时根据实例类型(类型B)和参数类型(short或int)完成然而,在运行这段代码后,我得到了意想不到的结果,指针类型只决定了跳转哪个函数,这完全打破了我对多态性的基本假设...这引出了一个问题,我在哪里可以将2func实现与函数重载联系起来?谁能告诉我是什么原因导致了这个结果?谢谢classA{public:virtualvoidfunc(shortx){printf("A::func%d\n",x);}};classB:publicA{public:virtualvoidfunc(intx){printf("B

c++ - 模板函数参数类型中的模板标识符与 decltype

你认为哪个更好?templatevoidfunc(Tx,Ty){}或templatevoidfunc(Tx,decltype(x)y){}恕我直言,第二种形式似乎更可取,因为x和y类型之间的链接是明确的,并且至少在重命名模板标识符时,事情似乎不太容易出错。编辑第二种形式允许您使用第一个参数使用的子类型调用函数,而第一种形式需要完全相同的类型。这个论点似乎比前一个稍微好一点。 最佳答案 它们在语义上是不同的,所以这取决于你想要实现什么。第二个比第一个限制更多。考虑:templatevoidfunc1(Tx,decltype(x)y){

c++ - 使用 C++11 检查函数签名是否相同?

//test.cpp#includedouble*func(){}static_assert(std::is_same::value,"");intmain(){}编译命令:g++-std=c++11-ctest.cpp输出:test4.cpp:6:1:error:staticassertionfailed:static_assert(std::is_same::value,"");^上面的代码有什么问题?我该如何解决? 最佳答案 func是一个函数,你检查它是否是指向函数的指针,它失败了参见://test.cpp#include#

c++ - 将 Fortran 77 函数传递给 C/C++

是否可以将Fortran77函数作为回调函数指针传递给C/C++?如果是,怎么办?我在网上找到的信息与fortran90及更高版本有关,但我的遗留代码库是77。非常感谢 最佳答案 如果可以在FORTRAN77中完成,它将是特定于编译器和平台的。Fortran2003的新ISOCBinding提供了一种混合Fortran和C以及任何遵循或可以遵循C调用约定的语言(例如C++)的标准方式。虽然正式成为Fortran2003的一部分,并且完全支持整个Fortran2003的Fortran编译器极少,但许多Fortran95编译器都支持IS

c++ - Lambda 表达式 : n3290 draft

n3290ISO草案中的一点:Lambda表达式:第5.1.2节,第6段:"Theclosuretypeforalambda-expressionwithnolambda-capturehasapublicnon-virtualnon-explicitconstconversionfunctiontopointertofunctionhavingthesameparameterandreturntypesastheclosuretype’sfunctioncalloperator.Thevaluereturnedbythisconversionfunctionshallbetheadd

c++ - 返回 T<A> 的函数在某些 typedef 情况下无法编译

我不明白为什么func3()无法编译,当func2()和func4()做。g++4.1.2:error:'B::my_t'hasincompletetypeVS2008:errorC2079:'B::my_t'usesundefinedclass'A'templatestructC{Tmt_t;};templatestructB{typedefCC_type;Tmy_t;};structOther{};structA{Bfunc2();B::C_typefunc3();//error:'B::my_t'hasincompletetypeB::C_typefunc4();};intmai

C++如何创建一个接受字符串并返回函数的映射

我想知道是否有一种方法可以使map(在C++中)返回一个函数。现在这是我的代码,它不起作用,我收到编译器错误。#include#include#includeusingnamespacestd;mapcommands;voidmethod(){cout任何一点建议都会很棒!提前谢谢你。 最佳答案 您不能在映射中存储函数——只能存储指向函数的指针。清理了一些其他次要细节后,您会得到如下内容:#include#include#includestd::mapcommands;voidmethod(){std::cout至少对于g++4.7