海湾合作委员会警告” “将在之后初始化”
我从无法修改的第三方代码中收到很多此类警告。 有没有办法禁用此警告或至少在某些区域禁用它(例如 VC++ 中的#pragma push/pop)?
例子:
list.h:1122: warning: `list<LogOutput*, allocator<LogOutput*> >::node_alloc_' will be initialized after
list.h:1117: warning: `allocator<LogOutput*> list<LogOutput*, allocator<LogOutput*> >::alloc_'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
确保成员在初始值设定项列表中出现的顺序与它们在类中出现的顺序相同
,或者您可以将
-Wno-reorder
Make sure the members appear in the initializer list in the same order as they appear in the class
or you can turn
-Wno-reorder
您可以使用
-Wno-reorder
禁用它。You can disable it with
-Wno-reorder
.对于那些使用 QT 并出现此错误的用户,请将其添加到 .pro 文件中
For those using QT having this error, add this to .pro file
顺序很重要,因为如果 a 在 b 之前初始化,则 a 取决于 b。将会出现未定义的行为。
the order is important because if a is initialized before b , and a is depend on b. undefined behavior will appear.
使用
-Wno-reorder
(man gcc 是你的朋友:))use
-Wno-reorder
(man gcc is your friend :) )如果您在库标头中看到错误并且您使用的是 GCC,则可以通过使用
-isystem
而不是-I
包含标头来禁用警告。clang 中也存在类似的功能。
如果您使用的是 CMake,则可以为 SYSTEM “noreferrer”>
include_directories
。If you're seeing errors from library headers and you're using GCC, then you can disable warnings by including the headers using
-isystem
instead of-I
.Similar features exist in clang.
If you're using CMake, you can specify
SYSTEM
forinclude_directories
.初始化的顺序并不重要。所有字段都按照其在类/结构中的定义顺序进行初始化。但如果初始化列表中的顺序不同,gcc/g++ 会生成此警告。仅更改初始化顺序即可避免此警告。但是您不能在构造之前在初始化中使用定义字段。这将是一个运行时错误。所以你改变定义的顺序。小心并保持注意力!
The order of initialization doesn’t matter. All fields are initialized in the order of their definition in their class/struct. But if the order in initialization list is different gcc/g++ generate this warning. Only change the initialization order to avoid this warning. But you can't define field using in initialization before its construct. It will be a runtime error. So you change the order of definition. Be careful and keep attention!