【发布时间】:2021-07-19 17:39:17
【问题描述】:
这是我在 Stack Overflow 上发布的第一个问题,希望有人能解释一下。
所以基本上这两个类除了私有成员变量的顺序是相同的。输出是10 20 10 0 我不明白为什么声明的顺序会影响输出。
#include <iostream>
using namespace std;
class MyClass{
public:
MyClass(int value): b(value), a(b * 2){
cout << b << " " << a << " ";
}
private:
int b;
int a;
};
class YourClass{
public:
YourClass(int value): d(value), c(d * 2){
cout << d << " " << c << " ";
}
private:
int c;
int d;
};
int main(){
MyClass obj(10);
YourClass OBJ(10);
}
【问题讨论】:
-
类数据成员按照它们在类中的声明顺序进行初始化,而不是按照您在构造函数初始化列表中指定的顺序。对于YourClass,c会在d初始化之前被初始化,但是它使用d,所以在初始化c时基本上你有未定义的行为。
-
我不明白为什么声明的顺序会影响输出。这仅仅是因为 C++ 标准是这样指定的:eel.is/c++draft/class.base.init#13.3。
-
谢谢,我明白了。
标签: c++ class private member initializer