我已经阅读了一些有关在声明时为全局变量赋值的相互矛盾的信息。
有些人似乎允许这样做:
int g_int = 5;
而其他人则认为必须在主要内容中使用:
int g_int;
int main() {
g_int = 5;
}
我个人使用Visual Studio 2008-2013中的第一个样式没有任何问题。
main
之前执行?例如。 time_t g_starttime = time();
?答案 0 :(得分:1)
首先,int g_int = 5;
(和int g_int;
)不是声明,也不是声明。
这是合法的C ++吗?
是的,g_int
将使用值5
进行初始化。 (顺便说一句:对于int g_int;
g_int
,将使用值0
进行初始化。)
如果是合法的,那么函数结果的赋值也是合法的,函数调用保证在main之前执行吗?例如。 time_t g_starttime = time();?
是的,这是有保证的。
BTW:g_int = 5;
中的main()
不是初始化,只是分配。这意味着如果在输入g_int
之前使用main()
,则会使用默认值0
(不是5
)。
答案 1 :(得分:1)
其他人说它必须在主
中初始化
&#34;其他&#34;是错误的:虽然在翻译单元内定义的变量肯定可以<{1}}中分配,但他们不必在<{1}中分配 }。
这在C ++中是完全合法的。函数结果的赋值也是合法的,并且在进入main
之前保证初始化。
此外,如果您在同一翻译单元内有多个初始化声明(即在同一个CPP文件中),则保证以文本顺序执行。如果你这样做
main
输出保证
main