[英]c++ data members initialization order when using initialization list
class A
{
private:
int a;
int b;
int c;
public:
A() : b(2), a(1), c (3)
{
}
};
根据C ++标准,数据成员是按照声明的顺序构造和初始化的,对吗?
但是当使用初始化列表时,我们正在改变数据成员的顺序,现在它们是按照初始化列表的顺序还是声明的顺序初始化?
按声明顺序,初始化列表中的顺序无关紧要。 有些编译器实际上会给你警告(gcc)告诉你初始化列表顺序与声明顺序不同。 这就是为什么当你使用成员初始化其他成员等时你也必须要小心。
不,初始化列表与它无关。
成员始终按照它们在类主体中出现的顺序进行初始化。
如果订单不同,有些编译器甚至会警告你。
它们按声明的顺序初始化。 许多编译器也警告你,尽管标准允许,你的初始化列表与声明顺序不匹配。
在C ++ 11中,您还可以:
class A
{
private:
int a = 1;
int b = 2;
int c = 3;
public:
A()
{
// your code
}
};
类数据成员总是以其在类中的声明的top-> bottom顺序初始化,并以相反的顺序进行破坏。 初始化列表不会影响数据成员的初始化顺序。
在使用初始化列表时,您可以查看以下相关问题以了解更棘手的情况,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.