1,c++类成员变量初始化顺序,和成员变量定义顺序保持一致,而和构造函数初始化列表中的顺序无关
#include <iostream>
class A {
public:
A(int a, int b):m_a(a), m_b(b),m_c(m_a + m_b) {
std::cout << "m_a:" << m_a
<< " m_b:" << m_b
<< " m_c:" << m_c << std::endl;
}
private:
int m_c;
int m_a;
int m_b;
};
int main(){
A a(1, 2);
return 0;
}
构造A类对象时,首先初始化成员变量m_c。而m_a和m_b此时还没有被初始化,所以m_c的值就被初始化为不可预知的值
2,正确的写法
#include <iostream>
class A {
public:
A(int a, int b):m_a(a), m_b(b),m_c(a + b) {
std::cout << "m_a:" << m_a
<< " m_b:" << m_b
<< " m_c:" << m_c << std::endl;
}
private:
int m_c;
int m_a;
int m_b;
};
int main(){
A a(1, 2);
return 0;
}