草庐IT

c++ - 全局函数和不明确的参数 NULL 与 char* 在 vs 2013 和 GCC 之间

我试图了解当前C++14标准关于解决模糊函数调用的内容,主要是因为我看到GCC4.9.1和VisualStudio2013更新3之间的差异这是代码(MS和GCC完全相同):#includeusingnamespacestd;voidf(char*str,intchars){coutVisualStudio使用默认vs标志调用f(char*,int)GCC给了我一个编译器错误:重载'f(char*&,NULL)'的调用不明确。gcc仅使用-std=c++11标志。 最佳答案 这取决于NULL的定义。MSVC将其定义为0,因此int重载

c++ - VS2012 "Generating Code"大型硬编码数组速度慢

我们有一个工具可以在头文件中生成一个类,该文件是用硬编码数组生成的。自动生成的值由使用自动生成值的实际实现继承。自动生成的示例:classMyTestAutoGen{std::vectorm_my_parameter1;std::vectorm_my_parameter2;...public:MyTestAutoGen(){SetDefaultValueFor_my_parameter1();SetDefaultValueFor_my_parameter2();...}voidSetDefaultValueFor_my_parameter1(){inttmp[]={121,221,33

c++ - std::function 签名指针 vs 指针引用 = 没有区别?

这是代码示例:#include#includestructFoo{};typedefboolfunc_type(Foo*&,conststd::string&);typedefstd::functionFunctionalType;boolf(Foo*,conststd::string&){}intmain(){#if1func_type*func;func=f;#elseFunctionalTypef2;f2=f;#endif}如您所见,我已将“对指针的引用”声明为第一个参数的函数类型Foo*&,我希望该函数仅以“指针”作为第一个参数Foo*不能分配给这种类型的变量。#if1regi

c++ - 从 Visual Studio 2013 迁移到 Visual Studio 2015 后,调用 printf 样式的函数会导致警告

我有一个调用fprintf的程序。在VisualStudio2013中,编译和执行的所有内容都没有错误和警告。现在该项目已迁移到VisualStudio2015(没有任何更改),我在大多数fprintf调用中收到以下警告:C4474:toomanyargumentspassedforformatstring大多数警告都指向以下代码行:fprintf(stderr,"Missingheaderfilename.Formantis:\n",pArg);我该如何解决这个问题?我是否需要重写我的代码,或者我的项目设置是否有问题导致这些警告?我看到了,在thisMSDN文章对这些函数进行了更改:

c++ - VS 编译警告 : result of 32-bit shift implicitly converted to 64 bits

VisualStudio2013发出恼人的(看似无关紧要的)编译警告:#include#definePRECISION16uint64_thi=0;for(uint8_ti=0;i这是编译警告:warningC4334:'改1好像解决了至1.所以我一直在尝试找出1中可能出现的问题.显然,如果i>=PRECISION,那么左移操作将产生未定义的行为。但是,变量i不超过PRECISION-1的值.此外,即使我们假设编译器无法推断出这个事实,我也看不出这个编译警告与左移操作数导致的潜在未定义行为有什么关系。也许它假定PRECISION-1-i的无符号值可以大于31。但是我应该如何告诉编译器它

c++ - CMake:如何在安装了 VS2017 的情况下指定 VS2015.3 工具集

我安装了VS2017,同时安装了VS2017(v141)和VS2015.3(v140)工具集。我需要使用CMake生成一个解决方案,我希望CMake被“愚弄”,就像安装了VS2015一样,这样我就可以使用v140工具集构建项目。我知道这个问题可能与以下问题重复:Howcmakespecify"PlatformToolset"foraVisualStudio2015project?但它提供的解决方案对我没有帮助。错误信息是:SelectingWindowsSDKversion10.0.14393.0totargetWindows10.0.15063.TheCcompileridentif

c++ - 修改嵌套lambda中捕获的参数 : gcc vs clang?

从clang切换到gcc时,我遇到了一个奇怪的行为。clang编译成功,gcc报错。这是重现该行为的最小示例。我已经尝试使用c++14和c++17以及多个clang和gcc版本。谁在这里,clang还是gcc?structA{intvalue;};automakeCallback(constA&a){autocallback=[aCopy=a](inti){[aCopy,i]()mutable{aCopy.value=i;}();};returncallback;}编辑:将外部lambda更改为mutable,解决了gcc上的问题。 最佳答案

c++ - VS2005、VS2008下C++生成的EXE速度; VS2010编译器

当我从VS6升级到VS2005时,我发现在默认编译设置下我的国际象棋引擎程序的速度提高了10%。想知道一般情况下是否也是如此,以及从那时起对MSC++编译器的最终输出进行了哪些改进(如果有的话)。 最佳答案 关于从2010之前的VC++版本迁移到VC++2010+:如果您大量使用STL容器和算法,升级到VC++2010+可能会提供显着超过10%的改进,因为VC++2010+实现了C++11的移动语义。我记得关于Boost的一个特定帖子声称从VC++2008迁移到VC++2010后,他们的应用程序性能提高了900%的邮件列表:[boo

c++ - : returnType vs returnType &?这几种形式有区别吗

考虑这些免费的独立功能:std::vector&f();//referencestd::vectorg();//value/*const*/std::vector&f1=f();//referencestd::vectorf2=f();//value/*const*/std::vector&g1=g();//referencestd::vectorg2=g();//value有什么区别:f()和g()。这是一个简单的问题,但我仍然希望听到一些关于它们的详细评论,因为这可能有助于理解下一个问题的答案。f1和f2。它们是来自f()的同一个原始对象,还是f2是原始对象的拷贝?取消注释cons

c++ - VS2008 传递变量 - 结构与结构组件 - 优点/缺点?

我真的希望这不是那些super基本的问题之一。无论如何,我有一个包含47个组件的结构,我正在调用各种函数,这些函数一次使​​用3到10个这些组件。这样调用函数是否更好:foo(pParam->variable1,pParam->variable2,pParam->variable3)或foo(pParam)然后在函数中使用pParam->variable1;pParam->变量2;pParam->variable3;?提前致谢! 最佳答案 你应该通过引用传递结构,这样你就不需要复制所有的值:voidfoo(mySturctpPara