草庐IT

c++ - C++ (GCC) 中的四倍精度

就在最近,GCC4.6.0与libquadmath一起发布了。.不幸的是,GNU支持Fortran,但不支持C或C++(包含的只是.so)。我还没有找到在C++中使用这些新功能的方法,但是,GNUC确实支持__float128类型以保证四倍精度float。GNUC似乎不支持libquadmath中的数学函数。,例如fabsq(绝对值,q是quad的后缀)。有什么方法可以让这些函数在C++中运行,或者是否有一些替代库可以用于带有__float128的数学函数?在GCC中获得四精度float的最佳方法是什么?现在,我可以对它们进行加减乘乘,但这对我来说毫无用处,因为我无法将它们转换为字符串

c++ - "pure virtual function called"在 gcc 4.4 上,但不在新版本或 clang 3.4 上

我有一个MCVE,它在使用g++4.4.7版编译时在我的一些机器上崩溃,但可以在clang++3.4.2版和g++6.3版中使用。我想知道它是来自未定义的行为还是来自这个古老版本的gcc的实际错误。代码#includeclassBaseType{public:BaseType():_present(false){}virtual~BaseType(){}virtualvoidclear(){}virtualvoidsetString(constchar*value,constchar*fieldName){_present=(*value!='\0');}protected:virtu

c++ - 使用声明的命名空间(GCC/VS2010 中的错误)?

namespaceA{inti;}intmain(){usingA::i;usingA::i;}VS2010-编译良好gcc(ideone)-编译良好Comeau-给出错误“ComeauTest.c”,第10行:错误:“i”已在当前范围内声明使用A::i;"$7.3.3/8-"Ausing-declarationisadeclarationandcanthereforebeusedrepeatedlywhere(andonlywhere)multipledeclarationsareallowed."上面的例子表明代码确实格式错误。那么,这是GCC和VS2010中的错误吗?编辑2:删除

c++ - GCC 编译器是否应该对这个涉及 [[fallthrough]] 属性的格式错误的 C++ 代码进行诊断?

我在GCC编译器版本7.1.0上测试C++17功能。这与fallthrough属性有关,以下示例(liveexample)改编自在线CPP引用here#include"iostream"usingnamespacestd;intf(intn){switch(n){case1:case2:n=n+20;[[fallthrough]];case3://nowarningonfallthroughn=n+30;case4://compilermaywarnonfallthrough[[fallthrough]];//ill­formed,notbeforeacaselabel//n=n+40

c++ - 为什么 GCC 不能优化 `std::sqrt` ?

我有一个简单的程序:#includeintmain(){for(inti=0;iClang3.8在-O3优化它,但是gcc6.1没有。它产生以下程序集:##Annotationsincommentsaddedafterthequestionwasanswered,##forthebenefitoffuturereaders.main:pushq%rbxxorl%ebx,%ebxjmp.L2.L4:pxor%xmm0,%xmm0#breakcvtsi2sd'sfalsedepontheoldvalueofxmm0pxor%xmm1,%xmm1#xmm1=0.0cvtsi2sd%ebx,%

c++ - 返回元组时 GCC/Clang x86_64 C++ ABI 不匹配?

尝试tooptimizereturnvaluesonx86_64时,我注意到一件奇怪的事情。即,给定代码:#include#include#includeusingnamespacestd;constexpruint64_ta=1u;constexpruint64_tb=2u;pairf(){return{a,b};}tupleg(){returntuple{a,b};}Clang3.8outputsf的这个汇编代码:movl$1,%eaxmovl$2,%edxretq这对于g:movl$2,%eaxmovl$1,%edxretq看起来最佳。然而,当compiledwithGCC6.1

c++ - gcc -l 选项和 .la 库文件

您能否解释一下,如何使用-l选项链接.la文件?就我的经验而言,我只链接了静态库(.a)文件。现在我查看了一些Qt生成的Makefiles并且无法弄清楚,当指定-lQtCore开关而不是寻找libQtCore.a时,链接器如何计算出使用/打开libQtCore.la文件。另外-gcc手册指出,-l[libraryname]开关将包括lib[libraryname].a,而不是lib[libraryname].la。 最佳答案 .la文件据我所知是libtool垃圾,不应手动链接。无论出于何种原因需要它们,它们都由libtool在内部

c++ - 如何在 Qt Creator 中启用自定义 gcc 参数?

这个问题在这里已经有了答案:ConfiguringtheGCCcompilerswitchesinQt,QtCreator,andQMake(3个回答)关闭9年前。我需要在QtCreator中为g++传递“-std=c++0x”。我在构建环境中放置了一个变量:但我仍然收到警告:warning:extendedinitializerlistsonlyavailablewith-std=c++0xor-std=gnu++0x 最佳答案 您需要将QMAKE_CXXFLAGS+=-std=c++0x添加到您的.pro文件中。

c++ - 行为差异(GCC 和 Visual C++)

考虑下面的代码。#include#include#includestructXYZ{intX,Y,Z;};std::vectorA;intrec(intidx){inti=A.size();A.push_back(XYZ());if(idx>=5)returni;A[i].X=rec(idx+1);returni;}intmain(){A.clear();rec(0);puts("FINISH!");}我无法弄清楚代码在Linux(使用的IDE:Code::Blocks)上出现段错误的原因,而在Windows(使用的IDE:VisualC++)上却没有。当我使用Valgrind来检查实

c++ - 使用 GCC 进行原子 64 位写入

我在多线程编程方面陷入了困惑,希望有人能来给我一些理解。经过大量阅读后,我了解到我应该能够在64位系统上以原子方式设置64位int的值1。虽然我发现很多阅读困难,所以我想我会尝试做一个测试来验证这一点。所以我用一个线程编写了一个简单的程序,它将一个变量设置为两个值之一:boolswitcher=false;while(true){if(switcher)foo=a;elsefoo=b;switcher=!switcher;}另一个线程会检查foo的值:while(true){__uint64_tblah=foo;if((blah!=a)&&(blah!=b)){cout我设置了a=18