重点关注:C++全局变量初始化

Posted 不打烊杂货铺主

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重点关注:C++全局变量初始化相关的知识,希望对你有一定的参考价值。




重点关注:C++全局变量初始化




注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。



重点关注:C++全局变量初始化


什么时候初始化

当对象在创建时获得了一个特定的值,我们说这个对象被初始化。初始化不是赋值,初始化的含义是创建变量赋予其一个初始值,而赋值的含义是把当前值擦除,而以一个新值来替代。对象初始化可以分为默认初始化、直接初始化、拷贝初始化以及值初始化。

C++ Copy初始化

在《inside the c++ object model》一书中谈到copy constructor的构造操作,有三种情况下,会以一个object的内容作为另一个object的初值:

1.第一种情况:XX aa = a;  

2.第二种情况:XX aa(a);  

3.第三种情况:extern fun(XX aa); fun(a)函数调用  

4.第四种情况:XX fun(){...}; XX a = fun();函数返回值的时候 



~~~~~


初始化的顺序

对于出现在同一个编译单元内的全局变量来说,它们初始化的顺序与他们声明的顺序是一致的(销毁的顺序则反过来),而对于不同编译单元间的全局变量,c++ 标准并没有明确规定它们之间的初始化(销毁)顺序应该怎样,因此实现上完全由编译器自己决定,一个比较普遍的认识是:不同编译单元间的全局变量的初始化顺序是不固定的,哪怕对同一个编译器,同一份代码来说,任意两次编译的结果都有可能不一样。

因此,一个很自然的问题就是,如果不同编译单元间的全局变量相互引用了怎么办?
当然,最好的解决方法是尽可能的避免这种情况(防治胜于治疗嘛),因为一般来说,如果出现了全局变量引用全局变量的窘况,那多半是程序本身的设计出了问题,此时最应该做的是回头重新思考和修改程序的结构与实现,而不是急着穷尽技巧来给错误的设计打补丁。


关注我带你学习更多知识




以上是关于重点关注:C++全局变量初始化的主要内容,如果未能解决你的问题,请参考以下文章

C++:全局变量和static变量初始化

关于C++全局变量和静态变量初始化的一些总结

C++ 全局 静态结构体变量的初始化

C++中,类内的成员变量自动初始化为零吗,而全局变量随意赋值

C++面试题目汇总

c++ 全局变量初始化(initializer_list的向量)