jjzjj

c++ - 在 MSVC++2010 中禁用警告

我有以下代码:/**Stupidlycopiesunicodecharsintonormalchars.*/std::stringwstring2string(__inconststd::wstring&s){std::stringtemp(s.length(),'');#pragmawarning(push)#pragmawarning(disable:4244)//possiblelossofdatastd::copy(s.begin(),s.end(),temp.begin());#pragmawarning(pop)returntemp;}我的编译器仍然显示警告C4244:1>

c++ - "enum class"MSVC 10.0 的仿真或可靠替代方案

我正在为以下问题寻找一种hacky的解决方案:GCC4.4+接受以下c++0x代码:enumclassmy_enum{value1,value2};允许这样使用:my_enume=my_enum::value1;这带来了所有的花里胡哨。我想让这段代码与MSVC2010兼容,大意是使用语法不会改变。我之前已经思考过here,并且接受的答案有效,但是需要枚举和枚举值的两个不同名称正在破坏这两种方法的兼容性。这使得按原样替换C++0x代码当然无法使用。我想知道是否有一些#undef和#define诡计可以解决这个问题,让我使用enumclass-像语法(可能没有严格的类型安全等),但至少是相

c++ - "enum class"MSVC 10.0 的仿真或可靠替代方案

我正在为以下问题寻找一种hacky的解决方案:GCC4.4+接受以下c++0x代码:enumclassmy_enum{value1,value2};允许这样使用:my_enume=my_enum::value1;这带来了所有的花里胡哨。我想让这段代码与MSVC2010兼容,大意是使用语法不会改变。我之前已经思考过here,并且接受的答案有效,但是需要枚举和枚举值的两个不同名称正在破坏这两种方法的兼容性。这使得按原样替换C++0x代码当然无法使用。我想知道是否有一些#undef和#define诡计可以解决这个问题,让我使用enumclass-像语法(可能没有严格的类型安全等),但至少是相

c++ - MSVC 2017 下缺少 C11 strerrorlen_s 函数

我正在尝试从C11standard中为strerrorlen_s函数查找要包含的headerMSVC2017下。我需要它来为使用strerror_s获得的错误消息分配空间。代码如下:autosize=strerrorlen_s(errno)+1;char*errorReason=(char*)alloca(size);strerror_s(errorReason,size,errno);std::ostringstreamoss;oss在文档中有以下文字:Aswithallbounds-checkedfunctions,strerror_sandstrerrorlen_sareonly

c++ - MSVC 2017 下缺少 C11 strerrorlen_s 函数

我正在尝试从C11standard中为strerrorlen_s函数查找要包含的headerMSVC2017下。我需要它来为使用strerror_s获得的错误消息分配空间。代码如下:autosize=strerrorlen_s(errno)+1;char*errorReason=(char*)alloca(size);strerror_s(errorReason,size,errno);std::ostringstreamoss;oss在文档中有以下文字:Aswithallbounds-checkedfunctions,strerror_sandstrerrorlen_sareonly

c++ - MSVC 中的虚拟继承错误

看来我的问题是MSVC中的错误。我正在使用带有ServicePack1的VisualStudio2008,并且我的代码适用于GCC(在codepad.org上测试过)。关于这个错误的任何官方信息?任何想法如何解决它?VS2010中的bug修复了吗?我们将不胜感激所有见解。代码:structBase{Base(inti=0):i(i){}virtual~Base(){}virtualBase*clone()const=0;protected:inti;};structA:virtualpublicBase{A(){}virtualA*clone()const=0;};structB:pu

c++ - MSVC 中的虚拟继承错误

看来我的问题是MSVC中的错误。我正在使用带有ServicePack1的VisualStudio2008,并且我的代码适用于GCC(在codepad.org上测试过)。关于这个错误的任何官方信息?任何想法如何解决它?VS2010中的bug修复了吗?我们将不胜感激所有见解。代码:structBase{Base(inti=0):i(i){}virtual~Base(){}virtualBase*clone()const=0;protected:inti;};structA:virtualpublicBase{A(){}virtualA*clone()const=0;};structB:pu

c++ - 使用 extern c 和 dllexport 与模块定义 (msvc++) 进行标准调用名称修改

我试图为dll导出一个简单的测试函数,以便与指定调用约定为的应用程序(仅供引用:mIRC)一起使用:int__stdcalltest_func(HWNDmWnd,HWNDaWnd,char*data,char*parms,BOOLshow,BOOLnopause)现在,要从应用程序中调用它,我会使用test_func,但我注意到由于名称修改,它并不像我想象的那么简单。通过此处的类似主题,我了解到将extern"C"与__declspec(dllexport)结合使用是一种等效的(某种程度上)消除重整的方法到模块定义(.def)。但是,当使用extern/dllexport方法时,我的函

c++ - 使用 extern c 和 dllexport 与模块定义 (msvc++) 进行标准调用名称修改

我试图为dll导出一个简单的测试函数,以便与指定调用约定为的应用程序(仅供引用:mIRC)一起使用:int__stdcalltest_func(HWNDmWnd,HWNDaWnd,char*data,char*parms,BOOLshow,BOOLnopause)现在,要从应用程序中调用它,我会使用test_func,但我注意到由于名称修改,它并不像我想象的那么简单。通过此处的类似主题,我了解到将extern"C"与__declspec(dllexport)结合使用是一种等效的(某种程度上)消除重整的方法到模块定义(.def)。但是,当使用extern/dllexport方法时,我的函

c++ - 为什么 MSVC 在执行此位测试之前会发出无用的 MOVSX?

在MSVC2013中编译以下代码,64位发行版,/O2优化:while(*s==''||*s==','||*s=='\r'||*s=='\n'){++s;}我得到了以下代码——它使用64位寄存器作为查找表进行了非常酷的优化,带有bt(位测试)指令。movrcx,17596481020928;0000100100002400Hnpad5$LL82@myFunc:movzxeax,BYTEPTR[rsi]cmpal,44;0000002cHjaSHORT$LN81@myFuncmovsxrax,albtrcx,raxjaeSHORT$LN81@myFuncincrsijmpSHORT$LL