在为类编写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
这是代码。在此,成员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;
}
答案 0 :(得分:9)
这可能有所帮助,
Constructor initialization-list evaluation order
请参阅上面的AProgrammer的回复,
“它们在成员声明顺序中而不是在构造函数中按顺序构造的原因是,可能有几个构造函数,但只有一个析构函数。析构函数会破坏成员中的成员重建施工顺序。“ - AProgrammer 09年8月7日6:45