草庐IT

vc_runtimeMinimum_x

全部标签

c++ - 使用指向模板函数的指针时出现 VC++ 错误

我正在尝试为libcurl编写模板回调函数。但是,当使用指向模板函数实例的指针时,VC++2008和2010不断给我这个错误:template-callback.cpp(27):errorC2664:'curl_easy_setopt':cannotconvertparameter3from'size_t(__cdecl*)(void*,size_t,size_t,void*)'to'...'Contextdoesnotallowfordisambiguationofoverloadedfunction但是GCC(4.5.1)编译代码没有问题。这是代码的精简版:#includetemp

c++ - VC++ 的一个大错误?为什么初始化列表不对结构进行值初始化?

C++11标准8.5.4.3说:“如果初始化列表没有元素并且T是具有默认构造函数的类类型,则该对象是值初始化的。”structA{intget(){returni;}private:inti;};intmain(){Aa={};intn=a.get();cout这是VC++的错误吗?我的VC++是最新的2012年11月的CTP。 最佳答案 8.5p8涵盖了非聚合类类型的值初始化。在你的情况下,(非union)类有一个隐式声明的默认默认无参数构造函数(12.1p5),它没有被删除并且是微不足道的(同上)。因此8.5p8的第二个项目符号

c++ - Visual C++ 2010 与 VC 2008 的兼容性

我正在使用VisualC++2010编译一个程序,但我不希望每个人都必须下载可再发行包才能运行我的程序。不过,大多数将使用我的程序的人已经拥有VC++2008可再发行组件包,那么有没有一种方法可以让我编译它使其与VC2008兼容?或者有什么地方可以下载VC2008Express吗? 最佳答案 VisualStudio2010可以选择使用VisualStudio2008工具集进行编译。您可以在项目设置下找到它。我认为该选项只是在常规属性页面中标记为“平台工具集”。 关于c++-Visual

c++ - VC++ 与 GCC 预处理器

长话短说,gcc和vc++预处理器对于相同的输入有不同的输出。如果传递给另一个宏,vc++中的可变参数宏似乎不会执行“参数匹配”(如果它是正确的术语)。例如:#defineMACRO(a,...)head:a,tail:MACRO_OTHER(__VA_ARGS__)#defineMACRO_OTHER(a,...)head:a,tail:__VA_ARGS__与MACRO(1,2,3,4,5)gcc输出:head:1,tail:head:2,tail:3,4,5VC++输出:head:1,tail:head:2,3,4,5,tail:显然MACRO_OTHER中的a是2,3,4,5,

c++ - 为什么 VC++ 无法优化整数包装器?

在C++中,我试图围绕64位整数编写一个包装器。我的期望是,如果编写正确并且所有方法都是内联的,那么这样的包装器应该与真实类型一样高效。对此question的回答onSO似乎符合我的预期。我写这段代码是为了测试我的期望:classB{private:uint64_t_v;public:inlineB(){};inlineB(uint64_tv):_v(v){};inlineB&operator=(Brhs){_v=rhs._v;return*this;};inlineB&operator+=(Brhs){_v+=rhs._v;return*this;};inlineoperatorui

c++ - 如何在 VC++ 中给一个标识符下毒?

函数中毒是C++中非常有用的技术。一般来说,它指的是使一个功能无法使用,例如如果您想禁止在程序中使用动态分配,您可以“中毒”malloc函数,使其无法使用。“中毒”标识符意味着在“中毒”之后对标识符的任何引用都是硬编译器错误例如(参见现场演示here)#include#include#pragmaGCCpoisonmallocintmain(){int*p=(int*)malloc(sizeof(int));//compilererroruseofpoisonedfunctionmalloc*p=3;std::cout我发现这种技术对于防止在C++中滥用保留字非常有用。例如:#incl

c++ - 打包位域时 VC++ 在做什么?

为了澄清我的问题,让我们从一个示例程序开始:#include#pragmapack(push,1)structcc{unsignedinta:3;unsignedintb:16;unsignedintc:1;unsignedintd:1;unsignedinte:1;unsignedintf:1;unsignedintg:1;unsignedinth:1;unsignedinti:6;unsignedintj:6;unsignedintk:4;unsignedintl:15;};#pragmapack(pop)structccc;intmain(intargc,char**argv){

c++ - GLFW 的 VC++ LNK 错误

我正在使用VC++2010来处理一些OpenGL。然而,它正在成为一种痛苦。我不断收到错误代码。这是我正在使用的代码://Includestandardheaders#include#include//IncludeGLEW#include//IncludeGLFW#include//IncludeGLM#includeusingnamespaceglm;intmain(void){//InitialiseGLFWif(!glfwInit()){fprintf(stderr,"FailedtoinitializeGLFW\n");return-1;}glfwOpenWindowHint

c++ - 在 VC++ 中步入 MACRO

我正在调试一个源代码,它有很多大的#define'dMACRO例程。我对进入它们很感兴趣,但我想,VC++不允许进入功能......所以,我正在将它们转换为函数,但这对我来说变得越来越困难有没有办法进入宏例程?尤其是在VC++中?PS:如果gcc编译器支持进入MACRO,我可以将整个代码移植到gcc 最佳答案 除了以上所有正确答案外:我平时做的是混合显示(C+汇编)。这显示了真正发生的事情。即使您不是底层程序集的专家,它也可以让您了解会发生什么(即它是一个微不足道的替换还是一个复杂的循环)。它还将提供更多进入功能的机会。例如,如果您

c++ - emplace_back 和 VC++ 的挫败感

我正在使用VisualStudio2012,同时使用默认编译器和NovCTP编译器进行尝试,下面显示了我的问题:structdoesCompile{intmA,mB,mC,mD,mE;doesCompile(inta,intb,intc,intd,inte):mA(a),mB(b),mC(c),mD(d),mE(e){}};structdoesNotCompile{intmA,mB,mC,mD,mE,mF;doesNotCompile(inta,intb,intc,intd,inte,intf):mA(a),mB(b),mC(c),mD(d),mE(e),mF(f){}};int_tm