草庐IT

c++ - clang 和 gcc 中的这个警告似乎不正确

我相信BjarneStroutrup的新书TCPL第4版第66页中的示例有一个小错误,因为classVector_container没有std::initializer_list构造函数。错误信息here证实了这一点。#includeclassVector{double*elem;intsz;public:Vector(ints):elem{newdouble[s]},sz{s}{for(inti=0;i!=sz;++i)elem[i]=0;}Vector(std::initializer_listlst):elem{newdouble[lst.size()]},sz(lst.size

c++ - 当返回类型是一个类时,带有尾随返回类型的 GCC 属性警告

当返回类型是类时,GCC4.9.1似乎不喜欢带有尾随返回类型和属性的函数声明。考虑以下简单的测试用例:structbar{inta;bar(inta):a(a){}};autofoo()->bar__attribute__((unused));autofoo()->bar{returnbar(5);}intmain(){return0;}GCC打印关于属性的奇怪警告:argh.cpp:2:41:warning:ignoringattributesappliedtoclasstype‘bar’outsideofdefinition[-Wattributes]autofoo()->bar_

c++ - 两次 GCC 编译相同的输入,生成两个不同的代码(第二个错误)

我有时会遇到GCC(4.6.4,Ubuntu12.04)的奇怪问题,我正在使用它来编译一个巨大的项目(数百个文件和数十万行代码),但我最近发现了一些东西。在某些编译之后(似乎是随机发生的),我得到了一段特定的代码,编译方式不同且错误,导致我的代码出现未定义的行为:classsomeDerivedClass:publicsomeBaseClass{public:structanotherDerived:publicanoterBaseClass{voidSomeMethod(){someMember->someSetter(2);}}}其中“someSetter”定义为:voidsome

c++ - gcc 中的模糊重载,适用于 msvc

以下代码在msvc18.00上编译良好,但在gcc4.9.1上编译失败:#includetemplateclassNum{};classZero{};templateNumoperator+(Num,Num){return{};}templateZerooperator+(Num,Num){return{};}intmain(){Numone;Nummone;Numnull;autoa=one+one;static_assert(std::is_same>::value,":(");autob=one+mone;static_assert(std::is_same::value,":(

c++ - `pragma pack(push, 1)` 在 GCC 4.4.7 中崩溃。可能的编译器错误?

我遇到了一个让我难过的错误。我已将其缩小为GCC(特别是RHELLinux,GCCv.4.4.7)中的pragmapack命令的问题,可以在下面显示的小示例案例中重新创建该问题。看起来GCC在这种情况下计算了错误的偏移量,这将表现为循环内的崩溃。删除pragmapack也可以消除错误-但在实际应用程序中,这将导致使用许多额外的千兆字节内存,这是不可取的。在下面的示例中,您需要在启用优化(O3)的情况下进行编译才能体验失败。我还在结构中提供了一个示例项(cMagic),可以将其删除,这将更改结构对齐方式并防止错误触发。我查看了生成的程序集,认为这可能是一个编译器错误。我还缺少其他东西吗?

c++ - 调用 gcc _without_ -pthread 有什么好处?

我们知道添加-pthreadmakesGCCusereentrant/thread-safecode(编译C/C++代码时)。虽然我想如果您允许不可重入,您确实可以在这里和那里节省几个周期-我想知道不总是指定-pthread是否有任何实际优势。有吗? 最佳答案 一个例子:std::shared_ptr的libstdc++实现doesn'tuselockingwhencompiledwithout-pthread,如果您在单线程环境中大量使用共享指针,这可以大大提高性能。 关于c++-调用

c++ - Clang 和 GCC 在解析可变函数模板重载时的不同行为

考虑这段代码:#includeintfoo_i(intx){returnx+1;}charfoo_c(charx){returnx+1;}usingII=int(*)(int);usingCC=char(*)(char);templatestructfn{Ff;templatedecltype(auto)operator()(Args&&...args)const{returnf(std::forward(args)...);}};structfn_2:privatefn,privatefn{fn_2(IIfp1,CCfp2):fn{fp1},fn{fp2}{}usingfn::ope

c++ - gcc 版本 4 和 5 和 6 之间的区别

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion在为arm交叉编译器下载源代码时,我发现有多个gcc版本正在维护中。最新版本为v4.9.4、v5.4.0和v6.2.0。为什么v4比v5的最新版本和v6的第一个版本更新,这些版本之间的主要区别是什么?

c++ - 从 macos sierra 上的存储库构建 gcc 7 (head)?

我安装了homebrewgcc6,但想在运行sierra的mac上使用gcc7。然而,与过去工作的简单配置make不同,sierra的情况发生了很大变化,我不再想知道如何让gcc自行编译。我知道我从repo协议(protocol)中checkout的东西不应该工作,但至少我应该能够编译它。当前的障碍是不再有系统头文件的/usr/include并且我没有找到指向configure/make以使用XCode.app内部的选项,显然我的自制软件gcc6知道这一点。提供什么选项来配置以设置系统包含目录(可能是库)以在macosSierra上获取当前gcc编译? 最佳

c++ - 为什么 GCC 不允许我创建 `inline static std::stringstream` ?

我会直接去MCVE:#includestructA{inlinestaticstd::stringstreamss;};海湾合作委员会7.2和7.1refusetocompile它有以下错误:error:nomatchingfunctionforcallto'std::__cxx11::basic_stringstream::basic_stringstream()'inlinestaticstd::stringstreamss;^~Infileincludedfromblah:1:0:/opt/compiler-explorer/gcc-7.2.0/include/c++/7.2.0