将在[-Wreorder]之后初始化

Iri*_*van 28 c++ g++

当我编译我的文件时,我收到此警告:

In file included from AsyncSQL.cpp:8:0:
AsyncSQL.h: In constructor 'CAsyncSQL::CAsyncSQL()':
AsyncSQL.h:192:10: warning: 'CAsyncSQL::m_iCopiedQuery' will be initialized after [-Wreorder]
   int    m_iCopiedQuery;
      ^
Run Code Online (Sandbox Code Playgroud)

这是我的AsyngSQL.H http://pastebin.com/u72kyuq7 那么我做错了什么?

SU3*_*SU3 48

问题是在第22行初始化列表中初始化成员的顺序,

_SQLResult(): pSQLResult(NULL), uiNumRows(0),
              uiAffectedRows(0), uiInsertID(0)
Run Code Online (Sandbox Code Playgroud)

这些应该与它们在类定义中出现的顺序相同.例如:

class test {
  test(): foo(1), bar(2) { }
  int  foo;
  long bar;
};
Run Code Online (Sandbox Code Playgroud)

  • @AvindraGoolcharan:派对有点晚了但是:它可能导致运行时问题.考虑`struct test {int foo; int bar; test():bar(1),foo(bar + 1){}};`.`foo`将在*bar之前初始化*,因此它将具有不确定的值.(初始化处于声明顺序的原因是因为必须以反向声明顺序调用析构函数(不同的构造函数可能具有不同的顺序),并且我们希望销毁与销毁的顺序相反.) (9认同)
  • 这是一个纯粹的风格问题还是它真的会导致运行时问题? (2认同)
  • 即使没有代码,因为所有OP的pastebin链接都已损坏,这个答案仍然解决了我的问题。_关键要点_:**初始化器列表成员“应该按照它们在类定义中出现的顺序出现”**。谢谢你! (2认同)