草庐IT

MSVC_VERSION

全部标签

c++ - 如何强制 MSVC 编译器省略大型临时对象的堆栈分配?

这个问题不是thisone的重复问题或其他类似问题。这个问题是关于在初始化和使用后清除一个结构。更新在阅读了您的前几条评论后,我想澄清一下我的问题:如何强制MSVC编译器省略大堆栈分配?我更新了标题、文本和下面的代码以阐明这一点。我最近开始使用/GS、/sdl和/analyze编译器选项编译我的项目。(MicrosoftVisualC++2015)使用这些选项,编译器可以正确警告有问题的代码结构。但是,我遇到了一些我一直认为是好的C++风格的警告。请看下面的示例代码:structmy_struct{charlarge_member[64000];};voiddo_something_e

c++ - 缩小转换为 MSVC 中的 bool 警告

编译这段代码时:enumB:bool{T=true};structA{boolmember;};voidfoo(constBb=T){Aa{b};//warninghere}voidbar(){constBb=T;Aa{b};}MSVC在foo中发出警告:warningC4838:conversionfrom'constB'to'bool'requiresanarrowingconversion但是编译bar没问题。这是一个proof这是编译器错误还是预期行为? 最佳答案 narrowingconversion定义的相关部分在C++

c++ - MSVC 无法识别带有模板自动参数的 constexpr 函数

我试图为值列表中的值创建一个索引元查找器。这是代码:#include#includetemplatestructValueTplList;templateconstexprintMetaFindV(intind){//notfoundcasereturn-1;}templateconstexprintMetaFindV(intind=0){ifconstexpr(std::is_same_v){returnNeedleV==V?ind:MetaFindV(ind+1);}else{returnMetaFindV(ind+1);}}//maintemplatestructMetaInde

c++ - MSVC10 中的奇怪编译器错误

我有以下代码:std::for_each(tokens.begin(),tokens.end(),[&](Token&t){staticconststd::unordered_mapmapping([]()->std::unordered_map{//MapsstringstoTokenTypeenumeratedvaluesstd::unordered_mapresult;//RESERVEDWORDresult[L"namespace"]=Wide::Lexer::TokenType::Namespace;result[L"for"]=Wide::Lexer::TokenType:

c++ - 如何防止 MSVC++ 为 switch 语句过度分配堆栈空间?

作为遗留代码库更新工具链的一部分,我们希望从BorlandC++5.02编译器转移到Microsoft编译器(VS2008或更高版本)。这是一个嵌入式环境,其中堆栈地址空间是预定义的并且相当有限。事实证明,我们有一个带有大量switch语句的函数,这会导致在MS编译器下比在Borland下分配更大的堆栈分配,实际上会导致堆栈溢出。代码的形式是这样的:#ifdefPKTS#defineRETURN_TYPESPackettypedefstruct{inta;intb;intc;intd;inte;intf;}SPacket;SPacketerror={0,0,0,0,0,0};#else

c++ - 无法在 MSVC2012 下编译 7zip

我无法在MSVC2012下编译7zip。当我输入时:C:\7zsrc>nmakeNEW_COMPILER=1MY_STATIC_LINK=1Build.mak我明白了:Microsoft(R)ProgramMaintenanceUtilityVersion11.00.50727.1Copyright(C)MicrosoftCorporation.Allrightsreserved.link-nologo-OPT:REF-OPT:ICF/LARGEADDRESSAWARE-out:O\oleaut32.libole32.libuser32.libadvapi32.libshell32.l

c++ - 这个针对 MSVC 双重检查锁定错误和函数静态的解决方案有什么问题?

尚不完全清楚为什么这不起作用。托管对象仍然被构造两次:/**Returnsanobjectwithstaticstorageduration.ThisisaworkaroundforVisualStudio2013andearliernon-threadsafeinitializationoffunctionlocalobjectswithstaticstorageduration.Usage:@codemy_class&foo(){staticstatic_initializerinstance;return*instance;}@endcode*/templateclassstat

c++ - MSVC++ 2015 - SSE 编译器错误或程序中的错误/未定义行为?

我在处理SIMD颜色插值函数时遇到了一些奇怪的行为,我将其缩减为一个最小程序。此示例中的SIMD代码不再执行lerp,而是执行从32位颜色到XMM寄存器的解包,然后再返回到32位。在MSVC++2015(更新3)中,在Releasex64模式下,以下代码不会产生正确的结果,但在Debugx64或Release/Debugx86中它可以正常工作。这是空的Win32C++控制台应用程序项目中的唯一代码:#include#include#include#include#include"emmintrin.h"structColor4{uint8_tred;uint8_tgreen;uint8

c++ - 在模板参数列表中使用 sizeof... 时为 "too few template arguments"(MSVC 2017)

以下最小示例不基于当前的MSVC2017(19.16)。它确实基于MSVC2015和2017(19.14)的旧版本、GCC、Clang和ICC。所以我怀疑这是一个编译器错误。有效吗?如果不是,为什么?#include#includetemplateautofoo(std::integer_sequence){returnstd::array{Is...};}std::arraybar(){returnfoo(std::make_integer_sequence());}有效的变体:投入unsigned(sizeof...(Is))在参数列表中作为默认参数替换unsigned(...)与

c++ - __LINE__ 在 MSVC 中不是 constexpr

2022年11月28日更新Microsoft(R)C/C++OptimizingCompilerVersion19.34.31933forx86这个问题似乎已经解决了。原帖好的,最新的VS2019社区,本地“所有默认”C++控制台项目:intmain(){//clVersion19.21.27702.2forx86//constexprautoMSCVER=_MSC_VER;//1921constexprautoMSCFULLVER=_MSC_FULL_VER;//192127702constexprautoMSCBUILD=_MSC_BUILD;//2/*:errorC2131:ex