草庐IT

c++ - MinGW 作为可靠的 64 位 GCC 编译器

我担心64位MinGW编译器作为VisualC++编译器的替代品的可靠性。例如,假设C++代码在使用GCC4.6.2的Linux下完美构建和运行,相应的MinGW是否会在64位Windows下生成类似可靠的可执行文件/库?就可靠性而言,Cygwin是否是更好的选择?既不是VisualC++编译器? 最佳答案 首先是一些误解:MinGW(.org)不提供其运行时的64位版本。除了他们的32位CRT之外,MinGW-w64也是如此。他们还在致力于ARM支持。并支持各种额外的API(Win32和其他)。CygwinMinGW-w64:Cy

c++ - -GCC4.8.1 的标准默认值

如果我在使用GCC4.8.1编译我的C++应用程序时没有指定-std选项,它默认应用c++11值吗?我读了GCC文档中的话,但仍然不确定。我的英语不好,所以这可能是我的问题。-fext-numeric-literals(C++andObjective-C++only)Acceptimaginary,fixed-point,ormachine-definedliteralnumbersuffixesasGNUextensions.WhenthisoptionisturnedoffthesesuffixesaretreatedasC++11user-definedliteralnumeri

c++ - 为什么具有多个嵌套循环的代码可以在 GCC 上立即完成,但在 VS 上却需要永远?

longlongr=0;longlongk=0;for(;k此代码在i3Core上执行时间为0.000001秒,在i7Core上使用boost::timer::auto_cpu_timer进行了检查。但是对于visualstudio2010,它似乎可以无限期地运行。GCC或VS有什么问题?GCC优化过度了吗? 最佳答案 是的,GCC正在优化该代码。具体来说,它知道您没有使用结果,所以它会删除所有结果。(您永远不会使用变量r。)这叫做DeadCodeElimination.为了防止编译器优化它,您需要以某种方式使用结果。尝试在最后打印

c++ - GCC-4.7 编译错误

当我将此代码段的最后一行添加到我的程序代码中时:typedefstd::setJobSet;typedefboost::shared_ptrJobSetPtr;JobSetPtrjobs_;jobs_->insert(job);//line60我收到这个错误:g++-4.7-o/home/kron/Software/Synchronizer/1.0/Main.o-csrc/Main.cppInfileincludedfrom/usr/include/c++/4.7/string:50:0,from/usr/include/c++/4.7/bits/locale_classes.h:42

c++ - GCC 的调试堆/STL 调试等价物?

我计划更多地使用GCC(Linux和Windows),我想知道是否有MSVCdebugheap的等价物和STLchecks适用于GCCCRT和STL。我已经了解Valgrind等工具,但我正在寻找库中内置的东西。 最佳答案 我不太熟悉调试堆和STL检查,但是当我在Linux上的GCC中遇到内存问题时,我使用一个名为MALLOC_CHECK_的环境变量(来自malloc(3)):RecentversionsofLinuxlibc(laterthan5.4.23)andGNUlibc(2.x)includeamallocimplemen

c++ - 有人可以打破这条线 gcc -E -dM - </dev/null

刚刚遇到这个让我惊呆了的人:gcc-E-dM-这部分让我感到困惑:- 最佳答案 这给出了gcc中所有预定义宏的列表。-E表示运行预处理器。-dM表示从预处理器中转储预定义的宏。-用于从标准输入读取,而/dev/null仅提供一个空源文件。 关于c++-有人可以打破这条线gcc-E-dM- https://stackoverflow.com/questions/1529051/

c++ - 奇怪的 GCC 'expected primary expression...' 错误

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Templates:templatefunctionnotplayingwellwithclass’stemplatememberfunctiontemplatestructA{templatevoidf();};templatevoidF(A&a){a.f();//expectedprimary-expressionbefore‘)’token}intmain(){Aa;a.f();//Thisoneisok.}这是怎么回事?

c++ - 构造函数上的 SFINAE 在 VC2017 中有效,但在 clang/gcc 中无效

这个问题在这里已经有了答案:std::enable_iftoconditionallycompileamemberfunction(8个答案)关闭4年前。#includetemplatestructS{template>S(){}template>S(int){}};Ss{};//errorinclang/gcc,OKinVC2017Ss{0};//errorinclang/gcc,OKinVC2017在这两种情况下,clang/gcc都尝试实例化由于SFINAE实际上应该丢弃的ctor。错误信息是:error:notypenamed'type'in'std::enable_if';'

c++ - GCC 编译错误 : declaration of ‘strlen’ must be available

我的问题是,当我想制作一个下载的库时,我从GCC得到了一些奇怪的编译错误。编译器要求更正的代码似乎是正确的。报错都是这样的:Catalogue.h:96:error:therearenoargumentsto‘strlen’thatdependonatemplateparameter,soadeclarationof‘strlen’mustbeavailable这是第96行附近的代码:GaCatalogueEntry(constchar*name,T*data){if(name){_nameLength=(int)strlen(name);//LINE96//copyname_name

c++ - 为什么 GCC 在编译时不评估 constexpr?

举个例子:classsomething{public:staticconstexprintseconds(inthour,intmin,intsec){returnhour*3600+min*60+sec;}}然后:printf("Lookatthetime:%d\n",something::seconds(10,0,0));将使用g++编译为对函数的调用,而不是放置常量。为什么g++会那样做?它没有任何好处,而且有点违背了使用constexpr而不是可怕的宏的目的。 最佳答案 Whywouldg++dothat?constexpr