C ++中的静态变量是内部变量还是外部变量

时间:2014-01-12 15:08:38

标签: c++ static-variables

C ++内部变量或外部变量中的静态变量是什么?或者可以两个?


PS:在我看来(不确定它是否正确):

  • 内部变量在编译时分配其值。

  • 在链接时为外部变量分配其值。

2 个答案:

答案 0 :(得分:2)

根据C ++标准

  

3具有命名空间范围(3.3.6)的名称具有内部链接(如果是)   名称 - 变量,函数或函数模板   明确声明静态;或者,

至于你的陈述

  

PS:我了解到•内部变量的值被分配给   编译时间。

     

•在链接时为外部变量分配其值。

然后是错的。

在我看来,你试图混淆两个概念:静态存储持续时间和程序链接。

答案 1 :(得分:2)

初始化取决于静态变量的类型。

  1. 对于可以在编译时计算的基本类型和初始值,变量初始值应该放在可执行文件的一部分中,该部分映射到内存中,并在写语义上进行复制。

    < / LI>
  2. 但是,编译器还可以决定在运行时初始化static变量,通常在main()执行之前。但是afaik,唯一的限制是初始化在首次使用变量时完成,并且编译单元中的静态变量按照它们的写入顺序进行初始化(如果它们的初始化程序相互依赖)。

    < / LI>

    关键是,static变量在被main()调用的代码使用之前已初始化,但在初始化发生时未指定。编译器可以做它认为最有效的事情。

    在任何情况下,静态变量都至少存在,直到main()退出或exit()被调用。我很确定C ++也会在终止进程之前调用析构函数,但我不知道。