如果在m_B
之后声明了m_A
,是否在合法性以下的构造函数中将m_B
分配给m_A
?
class C {
int m_A, m_B;
C() : m_A(0), m_B(m_A) {}
};
答案 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) {}
};