原则上,在调用 main()
之前初始化在任何函数之外定义的变量(即全局、命名空间和类静态变量)。翻译单元中的此类非局部变量按其声明顺序初始化
以上是我的讲师课堂笔记中的台词。
#include <iostream>
using namespace std;
int a=99;
int main(int argc, char *argv[])
{
cout<<a<<endl;
cout<<b<<endl;
return 0;
}
int b=100;
运行此程序时出现错误。 --- 在调用 main()
100
b
真的吗?
原文由 tez 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里的问题不是初始化顺序:
b
确实在main
开始运行之前被初始化。问题是
b
的“可见性”。在编译main
_时_,没有b
。您可以通过将 --- 的定义/初始化移动到
main
b
之前来修复它:或者简单地指出
b
存在:当
b
在运行时创建或初始化时,这两种解决方案都不会改变,它们只是使b
在main
--- 中可用。