C++难道没有规定,全局变量的初始化顺序?没有自动调整的机制?编译器有BUG?
********************file1.cpp
int a1 = 1191;
extern int b2;
int b3 = b2 + 1;
********************file2.cpp
extern int a1;
int a2 = a1 + 1;
extern int b1;
int b2 = b1 + 1;
********************file3.cpp
extern int a2;
int a3 = a2 + 1;
int b1 = 2212;
********************main.cpp
extern int a3;
extern int b3;
int main()
{
std::cout<<a3<<std::endl;
std::cout<<b3<<std::endl;
}
猜猜上面的a3和b3的输出结果,是否正确?结果是有问题的。
相关推荐
C++全局变量初始化的一点总结
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 根据 C++ 标准,全局变量的初始化要在 main 函数执行前完成,常识无疑,但是这个说法有点含糊,main 函数执行前到底具体是什么时候呢?是编译时还是运行时?答案是既有编译时,也可能会有运行时(seriously), 从语言的层面来说,全局变量的初始化可以认为分成以下两个阶段(c++11 N3690 3.6.2): static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero init
全局变量初始化导致的dll加载失败工程
本附件是相关博文的示例工程,欢迎有需要的小伙伴下载。下载后使用vs2013直接可以编译测试。希望感兴趣的小伙伴能亲自动手实战。
C++ 成员变量的初始化顺序问题详解
C++ 成员变量的初始化顺序问题详解 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2: " << n2 <<endl; } }; int main() { A a; a.Print(); return 1; } 这时,那个考生这样回答:n1是2,n2是0。 在我电脑输出结果为: 如果你也这样回答,那么你肯定不懂初始化成
VC++全局变量初始化-16.09.26
重点说明了VC++全局变量动态初始化的顺序
c++ 子类构造函数初始化及父类构造初始化的使用
主要介绍了c++ 子类构造函数初始化及父类构造初始化的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


