草庐IT

c++ - 这是 MSVC++ 编译器错误吗?

我想我可能在VS2013附带的MSVC++编译器中发现了一个编译器错误,但这是一个我不能确定的简单案例。再加上我还在学习C++,所以我想在提交任何内容之前先在这里问一下;因为老实说,我很确定这只是我做错了什么,导致出现异常错误消息。无论如何,我将问题简化为一个小的测试文件:#include#includestd::wstringcstr_to_wstring(constchar*cString){std::stringtemp=cString;return{temp.begin(),temp.end()};}intmain(){std::cout当我尝试编译它时,出现以下错误:1>d:

c++ - 关键字 'template' 混淆了 MSVC

关于模板的“哪个编译器是正确的”问题之一。考虑以下内容:templateclassContainer{public:templateclassiterator;};templatetemplateclassContainer::iterator{public:iterator&operator++();};现在为operator++提供定义离线它看起来像这样:templatetemplatetypenameContainer::templateiterator&Container::iterator::operator++(){//doyourthingreturn*this;}果然几

c++ - MSVC 的 _M_X64 预定义宏说明

MSVC'sPredefinedMacros的文档状态“_M_X64[is]为x64处理器定义。”这到底是什么意思?是否会被定义:当我为x64处理器构建时,或者当我使用x64处理器构建时?具体来说,我正在为前一种情况寻找编译器开关,而不是后者。_M_X64是否足以满足该目的? 最佳答案 表示_M_X64是目标处理器。这是您构建的目的,而不是构建的基础。 关于c++-MSVC的_M_X64预定义宏说明,我们在StackOverflow上找到一个类似的问题: ht

c++ - 使用 MSVC 强制导出符号

我在DLL文件中有一个应用程序和几个插件。这些插件使用来自通过导出库应用。应用程序链接在几个静态库中,这是大多数符号的来源。只要应用程序使用符号,这就可以正常工作。如果那里没有使用该符号,我在编译DLL时会遇到链接器错误。如何强制导出仅在插件中使用的符号?为了触发导出,我尝试了这样的操作:classMyClassExporter{MyClassmInstance;public:MyClassExporter(){}};staticMyClassExporterTheMyClassExporter;在其中一个静态库中,应用程序是用来强制导出的,但这没有用。响应Greg(感谢您的回答)并澄

c++ - 根据 MSVC++ 中的 unicode 设置自动在 std::string 和 std::wstring 之间切换?

我正在编写一个DLL,并希望能够在MSVC++2010中的unicode和多字节设置之间切换。例如,我使用_T("string")和LPCTSTR和WIN32_FIND_DATA而不是-W和-A版本等等。现在我想让std::strings根据unicode设置在std::string和std::wstring之间变化。那可能吗?否则,这可能最终会变得极其复杂。 最佳答案 为什么不像Win32API那样做:在内部使用宽字符,并提供DoSomethingA函数的字符转换外观,将其输入简单地转换为Unicode。也就是说,您可以像这样定义

c++ - 这段代码是做什么的 : static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}};

#ifndefINFINITY#ifdef_MSC_VERunionMSVC_EVIL_FLOAT_HACK{unsigned__int8Bytes[4];floatValue;};staticunionMSVC_EVIL_FLOAT_HACKINFINITY_HACK={{0x00,0x00,0x80,0x7F}};#defineINFINITY(INFINITY_HACK.Value)#endif我目前正在开始使用Chipmunk物理引擎并在头文件中找到它INFINITY用于为物体设置无限动量,但是我不明白上面这段代码的作用! 最佳答案

c++ - MSVC 使用 constexpr 从可变参数模板方法中的基本模板参数中吞下 const if

我有一个问题,我几乎可以肯定这是一个MSVC错误,但也许我遗漏了什么。这是实际代码的简化版本:templateclassInnerType{};templateclassOuterType{public:voidfoo1(){ifconstexpr(true){bar(InnerType());}}voidfoo2(){if(true){bar(InnerType());}}voidbar(InnerType){}};如您所见,foo1()和foo2()之间的唯一区别是constexprif。以下是我尝试在MSVC中编译一些测试时发生的情况:OuterTypetest1;test1.f

指向成员的指针的 C++ 类内初始化使 MSVC 失败(但 GCC/Clang 工作)

这是一个非常简单的C++代码:#includestructA{inta;constexprstaticintA::*p=&A::a;virtualvoidf(){}};intmain(){Ax;x.a=0;x.*(A::p)=1234;std::cout更令人震惊的是,这段代码在GCC、Clang和MSVC之间显示了不同的结果。我试过4个编译器GCC:编译良好,打印1234。Clang:编译良好,打印1234。MSVC(在线):编译失败。带有VisualStudio2019的MSVC(本地):编译良好,打印0。(有趣的是,如果我删除f(),它会打印1234。)我不确定用它自己的成员对指

c++ - 重载 const 和非 const 转换运算符返回数组类型时出现 MSVC 错误 C2593

最近,我尝试使用转换运算符来替代operator[]。喜欢下面的代码:#includeclassfoo{public:usingtype=int[1];public:operatortype&(){returndata;}operatortypeconst&()const{returndata;}private:typedata;};intmain(){foof;f[0]=1;//errorhappensherestd::cout我发现它适用于G++但不适用于MSVCv141(2017)。MSVC报告:errorC2593:'operator['isambiguousnote:coul

c++ - MSVC : modifiers not allowed on non-memberfunction

我在linux下编写了一个信号/插槽库(Codeprojectarticlehere),同时使用Clang3.5和GCC4.9进行编译。它在两个编译器上编译时都没有警告(也在3.4版和4.8版上)。当我完成所有工作并将文章发布到网上时,没过多久我就收到投诉说它不能在MSVC上工作。(VisualStudioExpress2013?对不起,我对版本控制系统不熟悉。)我把它安装在虚拟机中自己看了一下,发现它不会编译以下内容:templatestructRemoveCV;templatestructRemoveCV{usingType=R(Args...);};templatestructR