jjzjj

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

c++ - 本地静态的线程安全初始化 : MSVC

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Isstaticinitthread-safewithVC2010?我知道gcc和llvm-clang发出代码以线程安全的方式初始化局部静态变量(这允许通过在函数中包装全局静态来逃避静态顺序初始化的失败)。Thismsdnblogpost然而,这是我能找到的关于vcc在这些情况下的行为的最佳文档,并且声称静态初始化不可能是线程安全的,因为局部静态的初始化程序可以递归调用相同的范围。我不赞成这个论点——如果初始化程序依赖于它自己的结果,这显然是一个编程错误。所以,鉴于这篇文章来自2004年,gcc和clang可以

c++ - MSVC : bug? 上的模板参数推导失败

以下代码无法在VC++8.0编译器上编译并出现错误(我还没有在最新的visualstudio编译器上尝试过。)errorC2440:'return':cannotconvertfrom'constchar*'to'constchar(&)[6]'templateinlineTconst&compare(Tconst&a,Tconst&b){returna在函数模板中,字符串似乎是constchar(&)[6].据我所知,当应用运算符,数组应衰减为指针。那么,这个错误可能是因为可能的错误吗? 最佳答案 这肯定是Microsoft编译器

c++ - 英特尔编译器生成的代码比 MSVC 慢 68%(提供了完整示例)

我让C++代码处理来自一个1800元素数组的三个连续值。ICC14.0编译的代码比MSVC生成的代码慢大约68%(1600对2700个CPU周期)。我不明白为什么。有人可以帮忙吗?即使我设置了Intel编译器-O3开关,它也不会改变时间。CPU是IvyBridge。#includeintmain(){intdata[1200];//Dummy-populatedatafor(inty=0;y 最佳答案 ICC在这里很糟糕,因为它正在计算每个data[n]访问alamovedi,dwordptr[rsp+rax*4+44h]的地址。.