我读到了一些关于在声明时为全局变量赋值的相互冲突的信息。
有些人似乎允许这样做:
int g_int = 5;
而其他人则说它必须在 main 中初始化:
int g_int;
int main() {
g_int = 5;
}
我个人在 Visual Studio 2008-2013 中使用过第一种样式,没有任何问题。
- 这是合法的 C++ 吗?
- 如果它没有在 C++ 中定义,那么它在 MSVC 和 g++ 中仍然是编译器定义的行为吗?
- 如果合法,函数结果的赋值是否也合法,并且函数调用保证在
main
之前执行?例如。time_t g_starttime = time();
?
最佳答案
others say it must be initialized in main
“其他”是错误的:虽然翻译单元内定义的变量当然可以在main
中分配,但它们不必在 main
中分配。
这在 C++ 中是完全合法的。函数结果的赋值也是合法的,并且保证在进入 main
之前进行初始化。
此外,如果您在同一翻译单元内(即在同一 CPP 文件内)有多个带有初始化的声明,则保证它们按文本顺序执行。如果你这样做
int twoTimes(int i) {
cout << "Doubling " << i << endl;
return 2*i;
}
int a = twoTimes(7);
int b = twoTimes(8);
int main() {
...
}
输出保证是
Doubling 7
Doubling 8
关于c++ - 在声明时对全局变量进行值初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38877371/