全局变量的初始化 对于不同编译单位的全局变量,其初始化的顺序没有任何的保证,因此对不同编译单位里的全局变量,在它们的初始化顺序之间建立依赖性都是不明智的。 此外也没办法捕捉到全局变量初始化抛出的异常,一般来说要减少全局变量的使用,特别是限制那些要求复杂初始化的全局变量。
1,尽量不用全局变量
2,用静态变量,通过访问器进行访问 例如:全局变量
int a = 5;
int b = a;
如果a,和b定义在同一个文件里,那没什么问题,结果b等于5.
如果a和b定义在不同文件里,就不能保证b也等于5,也就是说不能保证a先初始化. 事实上,除了在同一个文件定义的全局对象的初始化是按照定义次序来进行的之外,其他全局或静态变量之间的初始化次序没有任何保障。解决这种问题的方法是不直接使用全局变量,而改用一个包装函数来访问,例如
int get_a()
{
static int a = 5;
return a;
}
int get_b()
{
static int b = get_a();
return b;
}