海湾合作委员会警告” “将在之后初始化”

发布于 2024-08-07 04:50:58 字数 350 浏览 5 评论 0 原文

我从无法修改的第三方代码中收到很多此类警告。 有没有办法禁用此警告或至少在某些区域禁用它(例如 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_'

I am getting a lot of these warnings from 3rd party code that I cannot modify.
Is there a way to disable this warning or at least disable it for certain areas (like #pragma push/pop in VC++)?

Example:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

狼性发作 2024-08-14 04:50:58

确保成员在初始值设定项列表中出现的顺序与它们在类中出现的顺序相同

Class C {
   int a;
   int b;
   C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

,或者您可以将 -Wno-reorder

Make sure the members appear in the initializer list in the same order as they appear in the class

Class C {
   int a;
   int b;
   C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

or you can turn -Wno-reorder

梦与时光遇 2024-08-14 04:50:58

您可以使用 -Wno-reorder 禁用它。

You can disable it with -Wno-reorder.

太阳哥哥 2024-08-14 04:50:58

对于那些使用 QT 并出现此错误的用户,请将其添加到 .pro 文件中

QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder

For those using QT having this error, add this to .pro file

QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
夜雨飘雪 2024-08-14 04:50:58
Class C {
   int a;
   int b;
   C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

顺序很重要,因为如果 a 在 b 之前初始化,则 a 取决于 b。将会出现未定义的行为。

Class C {
   int a;
   int b;
   C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

the order is important because if a is initialized before b , and a is depend on b. undefined behavior will appear.

五里雾 2024-08-14 04:50:58

使用 -Wno-reorder (man gcc 是你的朋友:))

use -Wno-reorder (man gcc is your friend :) )

一笔一画续写前缘 2024-08-14 04:50:58

如果您在库标头中看到错误并且您使用的是 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 for include_directories.

情独悲 2024-08-14 04:50:58

初始化的顺序并不重要。所有字段都按照其在类/结构中的定义顺序进行初始化。但如果初始化列表中的顺序不同,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!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文