原则上,在调用main()之前初始化在任何函数外部定义的变量(即全局,名称空间和类静态变量).翻译单元中的这些非局部变量按其声明顺序初始化
以上是我的讲师给出的课堂笔记.
#include <iostream>
using namespace std;
int a=99;
int b;
int main(int argc, char *argv[])
{
cout<<a<<endl;
cout<<b<<endl;
return 0;
}
b=100;
Run Code Online (Sandbox Code Playgroud)
我运行它时出错.在调用main()之前'b'分配给100是不是真的?错误是 C++ requires a type specifier for all declarations
这里的问题不是初始化顺序:b在main开始运行之前确实已初始化.
问题是"可见度" b.在点在哪里main被编译,也就是没有b.
您可以通过将定义/初始化移动b到之前来修复它main:
#include <iostream>
using namespace std;
int a = 99;
int b = 100;
int main (int argc, char *argv[]) {
cout << a << '\n';
cout << b << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或者只是表明b存在:
#include <iostream>
using namespace std;
int a = 99;
extern int b;
int main (int argc, char *argv[]) {
cout << a << '\n';
cout << b << '\n';
return 0;
}
int b = 100;
Run Code Online (Sandbox Code Playgroud)
这两个解决方案b在运行时创建或初始化时都不会更改,它们只是b在内部提供main.
| 归档时间: |
|
| 查看次数: |
9253 次 |
| 最近记录: |