当前位置: 代码迷 >> 综合 >> C++编译中常见的一些警告信息及处理办法(未完待续)
  详细解决方案

C++编译中常见的一些警告信息及处理办法(未完待续)

热度:41   发布时间:2023-12-11 20:50:35.0

1# warning: ... will be initialized after... / ... warning:   when initialized here [1][2]

示例:

 class foo {//declarationint i;int j;public://constructor & its initializerfoo(int val): j(val), i(j) {}};
 此示例foo类编译时就将出现上面的警告信息。 
 
C++规定:构造函数初始化列表(constructor's initializer)中,编译器对成员初化的实际顺序是由成员的声明/定义顺序决定的,而与初始化列表中成员的排列顺序无关。在这个示例中,声明的顺序是先i后j,那么按根据这个规定,编译器也会先初始化i,再初始化j。这样上面的示例
  foo(int val): j(val), i(j) {}
在编译过程中首先就是用一个还未初始化的成员j来初始化成员i,这当然会给程序带来bug。所以,编译器友好地给出了上面那条警告信息。 解决办法自然是调整初始化顺序,与声明顺序一致:
  foo(int val): i(val), j(val) 
  相关解决方案