在声明时初始化全局变量

时间:2016-08-10 15:14:36

标签: c++ initialization global-variables variable-assignment variable-declaration

我已经阅读了一些有关在声明时为全局变量赋值的相互矛盾的信息。

有些人似乎允许这样做:

int g_int = 5;

而其他人则认为必须在主要内容中使用:

int g_int;
int main() { 
    g_int = 5; 
}

我个人使用Visual Studio 2008-2013中的第一个样式没有任何问题。

  • 这是合法的C ++吗?
  • 如果它没有在C ++中定义,它在MSVC和g ++中是否仍然是编译器定义的行为?
  • 如果是合法的,函数结果的赋值也是合法的,函数调用保证在main之前执行?例如。 time_t g_starttime = time();

2 个答案:

答案 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