在同一个变量上排序错误的顺序

时间:2015-07-18 07:13:41

标签: c++ g++ compiler-warnings

我收到了这样一个不寻常的编译器警告。

warning: '{anonymous}::edge_creator_DDR::edges_' will be initialized after [-Wreorder]
map< otg_DDR::edge, otg_DDR::EDGE_TYPE > & edges_;

edge_creator_DDR是一个结构,没有继承。 edges_的定义是,

map< otg_DDR::edge, otg_DDR::EDGE_TYPE > & edges_;

edge_creator_DDR::edges_map< otg_DDR::edge, otg_DDR::EDGE_TYPE > & edges_ 是相同的。为什么编译器会发出这样的警告?

1 个答案:

答案 0 :(得分:0)

您是否有初始化edges_的初始化列表?

警告说初始化列表与实际初始化的顺序不同(基本上,成员在类/结构中声明的顺序)。这通常不是问题,但有时候初始化的顺序很重要,当初始列表不匹配时,它可能误导读者的代码。

来自the GCC docs

  

-Wreorder(仅限C ++和Objective-C ++)

     

当代码中给出的成员初始化程序的顺序没有时发出警告   匹配必须执行的顺序。例如:

          struct A {
            int i;
            int j;
            A(): j (0), i (1) { }
          };
     

编译器重新排列i和j的成员初始值设定项以匹配   成员的声明顺序,向其发出警告   影响。 -Wall。

启用此警告

以下是从docs编译示例时从g ++获得的输出:

C:\so-test\test.cpp: In constructor 'A::A()':
C:\so-test\test.cpp:3:17: warning: 'A::j' will be initialized after [-Wreorder]
             int j;
                 ^
C:\so-test\test.cpp:2:17: warning:   'int A::i' [-Wreorder]
             int i;
                 ^
C:\so-test\test.cpp:4:13: warning:   when initialized here [-Wreorder]
             A(): j (0), i (1) { }
             ^