赞
踩
全局变量在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.
- #include <istream>
- using namespace std;
-
- class B {
- public:
- int b = 1;
- };
-
- extern B g_b;
- class A {
- public:
- int a = 0;
- A() {
- g_b.b = 101;
- }
- };
-
- #if 0
- B g_b;
- A g_a;
- #else
- A g_a;
- B g_b;
- #endif
- int main() {
- printf("g_b=%d\n", g_b); //AB: g_b=1; BA: g_b=101
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。