繁体   English   中英

使用初始化列表时的c ++数据成员初始化顺序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM