静态变量构造顺序有先后,如果先构造的(a)依赖后构造的(b),就会导致使用后构造的变量没有初始而出错。
这里涉及3个问题:
1.全局变量的构造顺序
a 先于 b 构造
2.编译器优化
如果b中的n是在初始化列表中,开启优化输出的是10,关闭优化输出的是0
3.在构造函数中初始化和在构造列表中初始化
#include <iostream>
class A
{
public:
A();
~A() {
};
private:
};
class B
{
public:
B():n(10){
printf("B\n");
// n = 10;
}
~B() {
}
void printB(int x) {
printf("printB n:%d, x=%d\n", n, x); // 这里输出的是多少?
}
private:
int n;
};
static A a;
static B b;
static const int g_n = 100; //普通类型不受到影响
A::A() {
//__asm int 3
printf("A\n");
b.printB(g_n);
}
int main()
{
std::cout << "Hello World!\n";
}
运行结果: