解决有关初始化列表顺序与成员订单不匹配的警告

时间:2013-04-08 15:36:10

标签: c++

我们需要在没有最高级别gcc警告的情况下进行项目编译。目前,我们对以下内容提出了很多警告:

struct Bob
{
    int a;
    int b;

    Bob()
        : b(0)
        , a(0)
    {
    }
};

警告说初始化列表的顺序与成员在类中声明的顺序不匹配。我理解这个警告是因为初始化的实际顺序来自类中成员的顺序,如果有些依赖于其他顺序,以相同的顺序排列初始化列表可以帮助发现错误。

但是,我们有TONS(和吨)代码,它们的初始化列表与成员顺序不匹配,并且成员不相互依赖,所以没有问题。但我们需要从代码中删除所有警告。

我们有什么自动解决方法吗?我提到过我们有很多代码吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

假设您有一个明智的人要求您“没有警告”,那么您可以请求例外并“禁用此警告”。它可能应该在逐个文件的基础上完成,理想情况下使用书面的“未来修复计划”解决方案,而不是批发“让我们为所有文件禁用此警告”。

另一个选项是查找导致警告的所有位置,并重新排序初始化程序。

请注意,警告只是说“初始化的顺序与您编写的顺序不同”,因此重新排序根本不会改变代码的行为 - 编译器已经为您重新排序!

答案 1 :(得分:0)

您可以使用

-Wno-reorder

只是禁用这些警告。