草庐IT

c++ - 定义(变量)没有被 MSVC 正确评估?

运行以下代码#include#defineFOO#defineBARdefined(FOO)intmain(){#ifBARstd::cout在VisualStudio显示Bardisabled!,同时在gcc中运行相同的代码或clang显示Barenabled!。这是Microsoft编译器中的错误吗?根据标准,什么是正确的? 最佳答案 根据标准,这是未定义的行为。[cpp.cond],强调我的Priortoevaluation,macroinvocationsinthelistofpreprocessingtokensthatw

c++ - 如何在 C++ 程序崩溃时获取堆栈跟踪? (使用 msvc8/2005)

有时我的C++程序在Debug模式下崩溃,我得到的是一个消息框,提示某些内部内存管理例程(访问未分配的内存等)中的断言失败。但我不知道那是从哪里调用的,因为我没有得到任何堆栈跟踪。我如何获取堆栈跟踪或至少查看它在我的代码中失败的位置(而不是库/内置例程)? 最佳答案 如果发生崩溃,无论您使用的是调试版本还是发布版本,都可以获得有关崩溃发生位置的信息。即使您在没有源代码的计算机上,也可以看到调用堆栈。为此,您需要使用通过EXE构建的PDB文件。将PDB文件放在与崩溃的EXE相同的目录中。注意:即使您拥有相同的源代码,构建两次并使用第一

C++:强制完成模板编译(MSVC/G++)

你好,祝你有美好的一天。以下代码片段在cl.exe(15.00.30729.01)和mingw-g++(4.4.0)上编译:templateclassTest{public:Tt;voiderror(){intdoesNotExist=6;returndoesNotExist;//test;return0;}另外,在cl.exe上你甚至可以逃避这样的事情:templateclassTest{public:Tt;voiderror(){doesNotExist=6;//现在,这显然会发生,因为编译器不会为模板类的方法创建内容,直到有人调用它们。但是,当您设计大型模板类时,这可能会带来问题

c++ - 为什么私有(private)继承不能解决静态函数的歧义? (在 MSVC 中测试)

我想知道为什么对静态函数的调用是模棱两可的,即使两者之一显然不可能调用,因为它是私有(private)的。我希望我可以使用private/protected继承来帮助编译器解决歧义。它是特定于MSVC还是以某种方式在标准中指定?structA{staticintnum(){return0;}};structB{staticintnum(){return1;}};structC:publicA,privateB{};intmain(){C::num();//Ambiguousaccessofnum}背景是我正在尝试一种通过继承在许多派生类(C、D、E、F、G)中重用重载行为(A中的行为)

c++ - 关于 C++ 编译器的几个问题 : GCC, MSVC、Clang、Comeau 等

我有几个关于C++编译器的问题C++编译器是否需要one-passcompiler?标准是否在任何地方谈论它?特别是GCC是一次性编译器吗?如果是,那么为什么它会在thisexample中生成以下错误两次(尽管每个错误消息中的模板参数都不同)?error:declarationof‘adderitem’shadowsaparametererror:declarationof‘adderitem’shadowsaparameter一个更一般的问题one-passcompiler的优点和缺点是什么?和multi-passcompiler?有用的链接:AListofC/C++compiler

c++ - lambda 表达式(MSVC++ 与 g++)

我有以下代码#include#include#include#includeintmain(){typedefstd::vectorVector;intsum=0;Vectorv;for(inti=1;il=[&]()->double{std::for_each(v.begin(),v.end(),[&](intn){sum+=n;//ErrorHereinMSVC++});returnsum;};std::cout上述代码在MSVC++10上产生错误,而在g++4.5上编译良好。产生的错误是1IntelliSense:对lambda主体中外部作用域局部变量的引用无效c:\users\

c++ - 为 MSVC 预构建的 Boost 1.37

我找不到为Boost1.37.0预构建的一组MSVC++库,只能找到源代码。我不明白他们古怪的构建系统是如何工作的……有什么地方可以下载visualstudio项目之类的吗? 最佳答案 BoostProComputing人们维护Windows的Boost安装程序,但他们通常需要几周时间才能将新版本上线。尚未发布1.37。没有VisualStudio解决方案(记住,Boost面向许多平台),尽管也努力支持buildingBoostwithCMake.我不确定他们在1.37上走了多远,但我相信这个过程还处于早期阶段。然而,标准构建系统并

获取Visual Studio所用MSVC编译器版本:_MSC_VER数值

  本文介绍查看VisualStudio软件_MSC_VER值的方法。  _MSC_VER是微软公司推出的C/C++编译器——MSVC编译器的一个内置宏,其值表示当前VisualStudio软件中MSVC编译器的具体版本。不同的VisualStudio软件版本对应着不同的MSVC编译器版本——无论是不同发布年份的版本(例如VisualStudio2017与VisualStudio2019),还是同一发布年份的不同版本(例如VisualStudio2017version15.8与VisualStudio2017version15.9),其MSVC编译器版本都有差异,因此其_MSC_VER值各不相

Qt 5.9.6 配置MSVC 2017编译器

一、安装VisualStudio使用MSVC2017的最低版本为VisualStudio2017,高版本适用。我使用的是VisualStudioCommunity2019。VS官网下载。选择安装通用Windows平台开发和使用C++的桌面开发。除默认选择外在单个组件安装以下内容:二、安装Windows10SDKhttps://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk打开Windows10SDK的官方网站下载,winsdksetup.exe,下完完成后运行。1、选择安装位置。2、选择features只需要选择De

MSVC Debug 与 Release 库

CMakeDebug后缀set_target_properties(libaPROPERTIESDEBUG_POSTFIX"d")或者set(CMAKE_DEBUG_POSTFIX"d")这样生成的库或者exe程序名会多一个d字符。如下链接vc++运行时库通过/MD、/MT可以改变MSVC运行库,/MD代表使用动态运行时库,程序运行时需要有MSVCRversionnumber.DLL,这些库是通过安装DownloadMicrosoftVisualC++Redistributables获得。例如msvcp140.dll就是在 MicrosoftVisualC++Redistributablefo