在构造函数中将成员分配给另一个成员是否合法?

时间:2018-08-13 17:54:58

标签: c++ constructor

如果在m_B之后声明了m_A,是否在合法性以下的构造函数中将m_B分配给m_A

class C {
    int m_A, m_B;
    C() : m_A(0), m_B(m_A) {}
};

1 个答案:

答案 0 :(得分:2)

是的,在构造函数中将一个成员分配给另一个成员是合法的。标准中有一个示例(第15.6.2 / 15节)

class X {
    int a;
    int b;
    int i;
    int j;
public:
    const int& r;
    X(int i): r(a), b(i), i(i), j(this->i) { }
};

请注意,数据成员按照在类定义中声明的顺序进行初始化。成员初始化程序的顺序无关紧要。 因此,以下有效

class C {
    int m_A, m_B;
    C() : m_B(m_A), m_A(0) {}     // Swapped the member initialization order.
};

但这无效

class C {
        int m_B, m_A;             // Swapped the declaration order.
        C() : m_B(m_A), m_A(0) {}
    };