草庐IT

c++ - gcc 版本之间的舍入差异

我正在调查whyatestcaseisfailing有问题的测试可以简化为执行(4.0/9.0)**(1.0/2.6),将其四舍五入为6位并检查已知值(作为字符串):#include#includeintmain(){printf("%.06f\n",powf(4.0/9.0,(1.0/2.6)));}如果我在Linux上的gcc4.1.2中编译并运行它,我会得到:0.732057Python同意,Wolfram|Alpha也同意:$python2.7-c'print"%.06f"%(4.0/9.0)**(1/2.6)'0.732057但是,我在Linux上的gcc4.4.0和OSX上

c++ - GCC 构建时间并没有从预编译的头文件中获得太多好处

我有一个庞大的项目,大约150000LOC的C++代码。构建时间大约是15分钟。本项目由多个不同规模的子项目组成。我为每个子项目构建了单独的预编译头文件,但是当我使用它们时,构建时间大致保持不变。构建时间似乎减少了5-10%,而不是更多。肯定会使用预编译头文件,我使用-Winvalid-pch选项并且我尝试使用-H编译器选项进行编译,我的预编译头文件出现在输出中并带有'bang'符号,表示编译器可以使用预编译头文件。我所有的预编译头文件都不是很大,每个文件大约50Mb。我用python脚本,找到here生成最常用的预编译头列表,所以我的预编译候选列表非常好。是否有任何免费/开源工具可用

c++ - 在 C++ 11 中使用 Homebrew 软件、gcc 和 llvm

这是我的问题:我想使用gcc或clang提供的C++11功能。但是,我有这些要求:我使用的是Mac我依赖于Homebrew软件提供的一堆库(真的不想自己编译它们)。特别是OSG,它本身依赖于大量其他库。还有提升,虽然我总是可以自己编译。Homebrew似乎只想使用gcc(如果我错了,请纠正我)。我找不到任何切换到LLVM的选项。虽然我知道这可能是由于并非所有库都与LLVM兼容,但这对于那些兼容的库来说仍然是一个不错的功能。gccmac上预装的gcc版本是4.2。gcc4.2没有所需的c++11功能。我已经通过Homebrew软件安装了4.7,但是搜索如何设置Homebrew软件来使用它

c++ - 使用 GCC Undefined Behavior Sanitizer

今天看了anarticle关于GCCUndefinedBehaviorSanitizer(ubsan)。但是,当我按照那里的步骤操作时(将-fsanitize=undefined添加到我的代码中),编译器(Ubuntu15.04上的GCC4.9.2)说未定义一些引用:||===Build:DebuginProject(compiler:GNUGCCCompiler)===|obj/Debug/App.o||Infunction`App::OnInit()':|/home/ilya/Project/App.cpp|31|undefinedreferenceto`__ubsan_handl

c++ - 为什么在使用快速数学时 GCC 或 Clang 不优化 1 条指令的倒数

有谁知道为什么GCC/Clang不会在下面的代码示例中优化函数test1以在使用快速数学选项时仅使用RCPPS指令?是否有另一个编译器标志会生成此代码?typedeffloatfloat4__attribute__((vector_size(16)));float4test1(float4v){return1.0f/v;}您可以在此处查看编译后的输出:https://goo.gl/jXsqat 最佳答案 因为RCPPS的精度比float除法要低一个很多。启用该优化的选项不适合作为-ffast-math的一部分。x86targetop

c++ - 带有 "noexcept"构造函数的程序被 gcc 接受,被 clang 拒绝

代码:structT{T(){}};structS{Tt;S()noexcept=default;};intmain(){//Ss;}g++4.9.2接受这一点,没有错误或警告,但是clang3.6和3.7报告第7行:error:exceptionspecificationofexplicitlydefaulteddefaultconstructordoesnotmatchthecalculatedone但是,如果Ss;行没有被注释掉,g++4.9.2现在会报告:noex.cc:Infunction'intmain()':noex.cc:12:7:error:useofdeletedf

c++ - 如何在 GCC 4.5 中使用 C++0x 原始字符串?

这个页面说GCC4.5有C++原始字符串文字:http://gcc.gnu.org/projects/cxx0x.html但是当我尝试使用此页面中的语法时:http://www2.research.att.com/~bs/C++0xFAQ.html#raw-strings#include#includeusingnamespacestd;intmain(){strings=R"[\w\\\w]";}我收到此错误:/opt/local/bin/g++-mp-4.5-std=gnu++0x-O3rawstr.cc-orawstrrawstr.cc:9:19:error:invalidcha

c++ - 内联 constexpr 函数定义是否合法? gcc (ok) vs clang (error)

我当前的程序被clang拒绝,但用gcc编译得很好。它归结为以下简化示例:structA{staticconstexprinlineintone();};inlineconstexprintA::one(){return1;}intmain(){return0;}g++4.7.2编译它没有错误(g++-std=c++11-Wall-g-omainexample.cpp)。clang++3.1拒绝它:$clang++-std=c++11-Wall-g-omainexample.cppexample.cpp:6:25:error:conflictingtypesfor'one'inline

c++ - 为什么 GCC 不使用 LOAD(无围栏)和 STORE+SFENCE 来实现顺序一致性?

以下是在x86/x86_64中实现顺序一致性的四种方法:LOAD(不带围栏)和STORE+MFENCELOAD(无栅栏)和LOCKXCHGMFENCE+LOAD和STORE(无栅栏)LOCKXADD(0)和STORE(无栅栏)正如这里所写:http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.htmlC/C++11Operationx86implementationLoadSeq_Cst:MOV(frommemory)StoreSeqCst:(LOCK)XCHG//alternative:MOV(intomemory),MFENCE注意:有一

c++ - MSVC++ 中的源字符集编码规范,如 gcc "-finput-charset=CharSet"

我想创建一些处理编码的示例程序,特别是我想使用宽字符串,例如:wstringa=L"grüßen";wstringb=L"שלוםעולם!";wstringc=L"中文";因为这些是示例程序。这对于将源代码视为UTF-8编码文本的gcc来说绝对是微不足道的。但是,直接编译在MSVC下不起作用。我知道我可以使用转义序列对它们进行编码,但我更愿意将它们保留为可读文本。是否有任何选项可以指定为“cl”的命令行开关,以便做这个工作?有没有像gcc'c-finput-charset这样的命令行开关?如果不是,您建议如何使文本对用户自然?注意:将BOM添加到UTF-8文件不是一种选择,因为它变得