C++ 成员初始化器列表问题:私有成员变量的声明顺序

问题描述

这是我在 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);
}

解决方法

类成员按其声明的顺序进行初始化。

Initialization Order of Class Data Members

#include <iostream>

class MyClass{
public:
    MyClass(int value): b(value++),a(value++){
        std::cout << b << " " << a << " " << std::endl;
    }
private:
    int b;
    int a;
};

class YourClass{
public:
    YourClass(int value): b(value++),a(value++){
        std::cout << b << " " << a << " " << std::endl;
    }
private:
    int a;
    int b;

};

int main(){
    MyClass obj(10);
    YourClass OBJ(10);
}

输出:

10 11
11 10

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...