构造函数初始化列表.初始化顺序

cur*_*rer 7 c++ constructor

可能重复:
构造函数初始化列表评估顺序

在为类编写C++构造函数时,为什么初始化成员字段的顺序应该是它们的声明顺序?

请考虑以下C++代码.在使用gcc(gcc -g -Wall foo.cpp)进行编译时,我收到了警告

g++ -g -Wall main.cpp 
main.cpp: In constructor ‘myclass::myclass(int, int, int, int, int, int)’:
main.cpp:12: warning: ‘myclass::z’ will be initialized after
main.cpp:11: warning:   ‘int myclass::y’
main.cpp:26: warning:   when initialized here
Run Code Online (Sandbox Code Playgroud)

这是代码.在此,成员z出现在构造函数类的初始化列表中,y并抛出上述警告.

#include <iostream>
#include <iomanip>

class myclass
{
public:
  int x;
  int y;
  int z;
  myclass(int num1, int num2, int num3, int num4, int num5, int num6);//constructor for the class

private:
  int a;
  int b;
  int c;
};

myclass::myclass(int num1, int num2, int num3, int num4, int num5, int num6) 
  :x(num1),z(num3),  y(num2), a(num4),b(num5),c(num6)
{}

int main(int argc, char *argv[])
{
  myclass jimmy(23,34,56,67,89,91);

  std::cout << jimmy.x << std::endl;
  std::cout << jimmy.y << std::endl;
  std::cout << jimmy.z << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 9

这可能有所帮助,

构造函数初始化列表评估顺序

请参阅上面的AProgrammer的回复,

"它们在成员声明顺序中而不是在构造函数中的顺序构造的原因是,可能有几个构造函数,但只有一个析构函数.析构函数以构造的重新分类顺序销毁成员." - AProgrammer 09年8月7日6:45