草庐IT

c++ - initializer_list函数重载的解决

#includeusingnamespacestd;classA{public:explicitA(constinitializer_list&a){}};voidfunc(constvector&a){}voidfunc(Aa){}intmain(void){func({1,2,3});}此代码编译失败:(19):errorC2668:'func':ambiguouscalltooverloadedfunction(13):note:couldbe'voidfunc(A)'(9):note:or'voidfunc(conststd::vector>&)'with[_Ty=int](1

c++ - 如何专门化模板函数以让它接受将 char 数组作为参数传递?

//problem.cpp:#includetemplatevoidfunc(constT&v);intmain(){inti;floatf;char*cp;charca[4];func(i);func(f);func(cp);func(std::string("std::string"));func(ca);func("string_literal");return0;}//problem2.cpp#includetemplatevoidfunc(constT&v);//undefinedreferenceto`voidfunc(intconst&)'templatevoidfunc

c++ - 奇怪的行为,用 int 初始化函数指针?

无意中,我发现这段代码可以在VS2012上编译。typedefvoid(*func)();funcf=func(12);f被初始化为一个整数12作为它的地址。据我所知,从整数转换为函数指针是有效的,如下所示:funcf=(func)12;虽然语句func(12)看起来更像是一个构造函数,所以我尝试了这个:funcf(12);编译失败。funcf=(func)12//ok,cast1funcf=func(12);//ok,what?2funcf(12);//failed3funcf=12;//failed4所以我的问题是:func(12)的真正底层语法是什么,是强制转换还是初始化?如何使

c++ - 模板参数中是否禁止使用 SFINAE,还是我遇到了 clang 错误?

以下是我在实际代码中遇到的问题的简化版本。精简版:只看gcc.godbolt.org处的代码和错误/长版:继续阅读;)假设我想要一个带有模板参数setting和方法intfunc(int)的类,例如:当setting为false时,func返回其参数当setting为true时,func将其参数加倍最简单的方法是专门化类模板:templatestructA{intfunc(x)const{return2*x;}};templatestructA{intfunc(x){returnx;}};这种方法的问题是,如果我有一堆不依赖于setting的其他方法,我将不得不在两个特化中复制粘贴它们

带有引用参数的 C++ 模板隐式实例化

在下面的简单示例中,我预计输出为“2222”。但是VC++11.0和g++4.6.1的实际输出都是“2122”。#includetemplatevoidfunc(Tx){x=2;std::cout(x);std::cout我反汇编后发现第一个func调用func((int&)x)使用func而不是func。为什么以及如何发生这种情况? 最佳答案 模板类型参数推导就是这样工作的。转换为int&无效,因为变量x已经是一个左值。当参数是左值且参数不是引用时,模板类型推导将推导出类型不是引用。

c++ - 警告 : resolving Func by linking to Func@##

我正在构建一个包含以下内容的DLL:extern"C"__declspec(dllexport)void__stdcallDrawMouse(intX,intY,intR,intG,intB){Buffer.SetMouse(X,Y,R,G,B);}然后在.def文件中我添加了:LIBRARYTest;DESCRIPTION"TestDefinitionFile"EXPORTSDrawMouse;然后当我编译时,我添加链接器选项:-static-static-libstdc++-static-libgcc-Wl,--kill-at-d--input-defsrc\Test.def-m3

c++ - 在什么平台上 func(shared_ptr(...), shared_ptr(...)) 真的很危险?

我记得ScottMeyers教我的func(shared_ptr(newP),shared_ptr(newQ));是危险的,因为(如果我没记错的话)内存分配、引用计数(构造)和分配给顺序>函数参数允许leak(理论上?)在极少数情况下出现。为了防止这种情况应该将shared_ptr封装在函数调用中,例如在make_shared()中。func(make_shared(),make_shared());这是一些discussion关于它。我想知道是否有(当前)编译器在该领域,在某些系统上确实可能在某些错误情况下留下一些漏洞?还是那些时代已经过去了,或者它们只是理论上的?最有趣的是知道其中

c++ - 无法获取要在 Visual Studio 和 clang 下编译的模板

我有以下缩小代码。带有//OnlyVS的行在VS上编译但在clang上不编译,带有//Onlyclang的行在clang上编译,但在VS上不编译。谁是正确的?更重要的是,如何在两者上编译等效行?测试的版本是clang3.7.0,VS2015。#include#includetemplateclassC{structB{std::functionfunc;B(std::functionfunc):func(func){}};templatestructD:B{usingB::B;templatevoidCall(T&t,std::index_sequence){func(std::get

c++ - 是否可以在 gcc 3.3+ 中以旧方式使用 __func__? (C++)

对于3.3之前的gcc版本和MS编译器,我使用以下宏:DEBUG_WARNING(...)printf(">WARNING:"__FUNCTION__"()"__VA_ARGS__);使用:DEBUG_WARNING("someFunctionreturned%d",ret);输出:>WARNING:Class::FunctionName()someFunctionreturned-1当我们有很多系统时,它非常方便,所有系统都发送输出。它是一个单行宏,允许我们相应地过滤输出。小代码,大用途,快乐我。由于__FUNCTION__(和C++中的__func__)定义发生了变化(我相信是为了

c++ - 异常 : Access violation

下面这段代码有什么问题以及如何修复它。#includeusingnamespacestd;templateclassguard{public:guard(Func1first,Func2last):last(last){first();}~guard(){last();}private:Func2&last;};templateguardmake_guard(Func1first,Func2last){returnguard(first,last);}voidfirst(){cout函数first()和last()不能在变量g过期之前被调用。在VC++2012上编译,在调试和Relea