我收到了这样一个不寻常的编译器警告。
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_
是相同的。为什么编译器会发出这样的警告?
答案 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) { }
^