草庐IT

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]的地址。.

c++ - 附加调试器时 unique_ptr dtor 调用速度慢得离谱 (msvc)

structtest_struct{test_struct(){}~test_struct(){}};#include#include#includeintmain(){printf("ctorbegin\n");{std::vector>test_vec;constintcount=100000;for(autoi=0;i我正在使用VS2010,发现了一些荒谬的性能问题。上面的代码在调试和发布版本(ctrl+f5)中都运行良好,但是当附加调试器(f5)时,dtor调用unique_ptr类的速度慢得无法忍受。结果机器代码是相当优化的,所以我不认为这是编译器问题而不是调试器问题,但我不

c++ - 为什么 == 运算符重载枚举在 MSVC 中不明确

除了MSVC,以下代码在我检查过的所有编译器(clang、mingw、g++)上都能正常编译。enumclassFoo{BAR};booloperator==(Fooa,Foob){return(int)a&(int)b;}intmain(intargc,char*argv[]){Foo::BAR==Foo::BAR;return0;}MSVC失败并出现以下错误:>main.cpp(10):errorC2593:'operator=='isambiguous>main.cpp(3):note:couldbe'booloperator==(Foo,Foo)'>main.cpp(10):n

c++ - 当重载具有多重继承的函数时,GCC 说调用它是不明确的,但 Clang 和 MSVC 没有

我正在使用这个变体库:https://github.com/cbeck88/strict-variant.它提供了一个类似于std::variant和boost::variant的类。鉴于此struct:structS{explicitS(double){}};我想这样做:strict_variant::variantv=2.0;这适用于Clang5.0.1和MSVC19.12.25831.00,但无法使用GCC7.2.1进行编译。我查看了库的代码并将问题简化为:#includestructS{constexprS(){}constexprexplicitS(double){}};te

c++ - msvc/permissive- std::string 重载运算符 '=' 不明确

它用/permissive编译,但用/permissive-编译失败。什么不符合要求以及如何解决?为什么在(2)中没问题,但在(4)(3)中失败了?如果我删除operatorlong也可以。如何在不更改调用站点(3,4)的情况下修复它?#includestructmy{std::stringmyVal;my(std::stringval):myVal(val){}operatorstd::string(){returnmyVal;};operatorlong(){returnstd::stol(myVal);};};intmain(){structMyStruct{longn=my("

c++ - qmake:处理 gcc 和 msvc 的选项

我想制作一个可以同时使用msvc和gcc的项目文件。例如,要优化速度,您可以执行cl/O2和g++-O3。但我不知道如何告诉项目文件来产生差异。我想要这样的东西:msvc:QMAKE_CXXFLAGS_RELEASE+=/O2/openmp/arch:AVXelse:QMAKE_CXXFLAGS_RELEASE+=-O3-march=native-fopenmp-D_GLIBCXX_PARALLEL可悲的是,这不起作用。其他方法是更改​​mkspecs并将新的与我的应用程序捆绑在一起,但它不是很便携。谢谢! 最佳答案 Jean,准确

c++ - MyClass::GetMessageMap() 和 MyClass::GetRuntimeClass (MSVC 2008) 的 MFC dlg 类链接错误

我复制了一个dlg框类的现有header(使用dlg类向导/mfc向导创建)。在我将cpp文件添加到项目之前,一切似乎都很顺利。现在我得到一些mfc魔术方法的奇怪链接错误:errorLNK2001:unresolvedexternalsymbol"public:virtualstructCRuntimeClass*__thiscallDlgGapWindow::GetRuntimeClass(void)const"(?GetRuntimeClass@DlgGapWindow@@UBEPAUCRuntimeClass@@XZ)errorLNK2001:unresolvedexternal

c++ - MSVC 中的分解

如何在MSVC中分解名称?gcc中有abi::__cxa_demangle函数。在MSDN中我找到了UnDecorateSymbolName:http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms681400%28v=vs.85%29.aspx不幸的是,这个函数甚至不能取消修饰这样的符号:#include#include#include#include#includeintmain(){SymSetOptions(SYMOPT_UNDNAME|SYMOPT_DEFERRED_LOADS);if(!SymInitialize(