class A
{
private:
int a;
int b;
int c;
public:
A() : b(2), a(1), c (3)
{
}
};
根据 C++ 标准数据成员按照声明的顺序构造和初始化,对吗?
但是在使用初始化列表的时候,我们改变了数据成员的顺序,现在是按照初始化列表的顺序初始化还是按照声明的顺序初始化呢?
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
}
};
类数据成员始终按其在类中声明的顶部->底部顺序初始化,并以相反的顺序销毁。初始化列表不影响数据成员的初始化顺序。
在使用初始化列表时,您还可以查看以下相关问题以了解更棘手的情况,