草庐IT

gcc-plugin

全部标签

c++ - gcc Woverloaded-虚拟警告

我认为以下C++代码是正确的,但在使用“-Woverloaded-virtual”编译时会产生一些警告,是警告是假的还是此代码存在真正的问题?如果这是一个虚假警告,我可以做些什么来避免它,定义所有异常虚拟变体派生的摆脱警告,但也许是一个更好的解决方案G++命令:g++-c-Woverloaded-virtualtest.cpptest.cpp:22:18:warning:‘virtualvoidintermediate::exception(constchar*)’washidden[-Woverloaded-virtual]test.cpp:32:18:warning:by‘virt

c++ - C++ (GCC) 中的 C99 严格别名规则

据我了解,GCC在C++中支持其所有C99功能。但是C++代码中如何处理C99严格别名?我知道在不相关类型之间使用C进行强制转换不是严格混叠安全的,并且可能会生成不正确的代码,但是C++呢?由于严格别名不是C++标准的一部分(对吗?),GCC必须自己指定语义。我认为const_cast和static_cast在相关类型之间进行强制转换,因此它们是安全的,而reinterpret_cast可以打破严格的别名规则。这是正确的理解吗? 最佳答案 不,你可能混合了不同的东西。严格的别名规则与C99标准完全无关。严格的别名规则Root于自[标

c++ - C++ (GCC) 中的 C99 严格别名规则

据我了解,GCC在C++中支持其所有C99功能。但是C++代码中如何处理C99严格别名?我知道在不相关类型之间使用C进行强制转换不是严格混叠安全的,并且可能会生成不正确的代码,但是C++呢?由于严格别名不是C++标准的一部分(对吗?),GCC必须自己指定语义。我认为const_cast和static_cast在相关类型之间进行强制转换,因此它们是安全的,而reinterpret_cast可以打破严格的别名规则。这是正确的理解吗? 最佳答案 不,你可能混合了不同的东西。严格的别名规则与C99标准完全无关。严格的别名规则Root于自[标

c++ - g++ 优化标志 : -fuse-linker-plugin vs -fwhole-program

我正在阅读:http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html首先建议:不应将使用此选项(-fwhole-program)与-flto结合使用。相反,依赖链接器插件应该提供更安全、更精确的信息。然后,它建议:如果程序不需要导出任何符号,则可以结合-flto和-fwhole-program以允许过程间优化器使用更积极的假设,这可能导致改进的优化机会。当链接器插件处于事件状态时,不需要使用-fwhole-program(参见-fuse-linker-plugin)。这是否意味着理论上,使用-fuse-linker-plugin和-

c++ - g++ 优化标志 : -fuse-linker-plugin vs -fwhole-program

我正在阅读:http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html首先建议:不应将使用此选项(-fwhole-program)与-flto结合使用。相反,依赖链接器插件应该提供更安全、更精确的信息。然后,它建议:如果程序不需要导出任何符号,则可以结合-flto和-fwhole-program以允许过程间优化器使用更积极的假设,这可能导致改进的优化机会。当链接器插件处于事件状态时,不需要使用-fwhole-program(参见-fuse-linker-plugin)。这是否意味着理论上,使用-fuse-linker-plugin和-

c++ - GCC NRVO/RVO 警告

是否有任何警告,让我们知道NRVO/RVO在GCC中是否执行?我发现-fno-elide-constructors关闭NRVO/RVO,但是NRVO/RVO有它自己的条件发生并且有时不会发生。有必要知道NRVO/RVO是否发生,以便了解何时发生额外的复制构造。我对编译时特性特别感兴趣。如果有一些特定的#pragmaGCC...(它会在其自身之后立即激活诊断)或使用静态断言机制的东西,那就太好了。 最佳答案 我不知道任何gcc特定的诊断消息或其他可以轻松解决您的任务的方法。正如您所发现的,-fno-elide-constructors

c++ - GCC NRVO/RVO 警告

是否有任何警告,让我们知道NRVO/RVO在GCC中是否执行?我发现-fno-elide-constructors关闭NRVO/RVO,但是NRVO/RVO有它自己的条件发生并且有时不会发生。有必要知道NRVO/RVO是否发生,以便了解何时发生额外的复制构造。我对编译时特性特别感兴趣。如果有一些特定的#pragmaGCC...(它会在其自身之后立即激活诊断)或使用静态断言机制的东西,那就太好了。 最佳答案 我不知道任何gcc特定的诊断消息或其他可以轻松解决您的任务的方法。正如您所发现的,-fno-elide-constructors

c++ - 在通用 lambda 中使用 `if constexpr` 访问成员类型需要两个分支的格式都正确 - gcc 与 clang

考虑两个具有不同成员类型别名的struct:structfoo{usingx=int;};structbar{usingy=float;};在template上下文中给定一个T,我想获得T::x或T::y取决于T是什么:templateautos(){autol=[](autop){ifconstexpr(p){returntypenameT::x{};}else{returntypenameT::y{};}};returnl(std::is_same{});}intmain(){s();}g++编译上面的代码,而clang++产生这个错误:error:notypenamed'y'in

c++ - 在通用 lambda 中使用 `if constexpr` 访问成员类型需要两个分支的格式都正确 - gcc 与 clang

考虑两个具有不同成员类型别名的struct:structfoo{usingx=int;};structbar{usingy=float;};在template上下文中给定一个T,我想获得T::x或T::y取决于T是什么:templateautos(){autol=[](autop){ifconstexpr(p){returntypenameT::x{};}else{returntypenameT::y{};}};returnl(std::is_same{});}intmain(){s();}g++编译上面的代码,而clang++产生这个错误:error:notypenamed'y'in

c++ - 默认参数,gcc vs clang

代码如下:structFoo{Foo(constchar*);};Foo::Foo(constchar*str=0){}VS2013和gcc4.8.0接受这样的代码,而clang3.3拒绝这样的代码:error:additionofdefaultargumentonredeclarationmakesthisconstructoradefaultconstructor从标准(C++03和C++11)的角度来看,谁是正确的?注意:我也喜欢clang的选择,但是我要向gcc和visualstudio报告bug,如果从标准的角度来看这是不正确的,这有助于说服编译器的开发者解决这个问题。GCC