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

时间:2012-08-25 22:40:58

标签: c++ constructor initializer-list

class A
{
private:
int a; 
int b; 
int c;

public:
A() : b(2), a(1), c (3)
{
}
};

根据C ++标准,数据成员按声明的顺序构造和初始化,是否正确?

但是当使用初始化列表时,我们正在改变数据成员的顺序,现在它们是按初始化列表或声明顺序初始化的吗?

5 个答案:

答案 0 :(得分:7)

按声明顺序,初始化列表中的顺序无关紧要。有些编译器实际上会给你警告(gcc)告诉你初始化列表顺序与声明顺序不同。这就是为什么当你使用成员来初始化其他成员等时你也要小心。

答案 1 :(得分:1)

不,初始化列表与它无关。

成员总是按照它们出现在类体中的顺序进行初始化。

如果订单不同,有些编制者甚至会警告你。

答案 2 :(得分:1)

他们按照声明的顺序初始化。许多编译器也警告你,你的初始化列表与声明顺序不匹配,尽管标准允许它。

答案 3 :(得分:1)

在C ++ 11中,你也可以这样做:

class A
{
    private:
    int a = 1; 
    int b = 2; 
    int c = 3; 

public:
    A()
    {
       // your code
    }
};

答案 4 :(得分:0)

类数据成员始终以其在类中的声明的top->底部顺序初始化,并以相反的顺序进行破坏。 初始化列表不会影响数据成员的初始化顺序。

使用初始化列表

时,您可以查看以下相关问题以了解更棘手的情况

How function call is working on an unitialized data member object in constructor's initilalizer list