当前位置:   article > 正文

C++全局变量的初始化过程_c++ 全局变量初始化

c++ 全局变量初始化

全局变量在main()前完成初始化(调用构造函数)

在调用构造函数前,全局变量已分配空间,内存全0

多个全局变量的初始化,按照代码编译的顺序

注意:全局变量被访问前可能它还没有调用构造函数初始化。

如果一个项目中,多个dll都用到一个全局变量在共同的lib中,则每个dll都有一个独立的全局变量(地址不同),每个全局变量会初始化。

如下代码,A里面访问了全局变量g_b, 改变全局变量g_a,g_b的顺序 会导致g_b.b的输出结果不同。

如按照A g_a; B g_b 的顺序定义,编译器会先调用A()时,这时g_b还没有调用B(), g_b.b=0,然后赋值 g_b.b=101; 

然后调用B(),g_b.b的值被改成1.

  1. #include <istream>
  2. using namespace std;
  3. class B {
  4. public:
  5. int b = 1;
  6. };
  7. extern B g_b;
  8. class A {
  9. public:
  10. int a = 0;
  11. A() {
  12. g_b.b = 101;
  13. }
  14. };
  15. #if 0
  16. B g_b;
  17. A g_a;
  18. #else
  19. A g_a;
  20. B g_b;
  21. #endif
  22. int main() {
  23. printf("g_b=%d\n", g_b); //AB: g_b=1; BA: g_b=101
  24. return 0;
  25. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/106381
推荐阅读
相关标签
  

闽ICP备14008679号