C ++内部变量或外部变量中的静态变量是什么?或者可以两个?
内部变量在编译时分配其值。
在链接时为外部变量分配其值。
答案 0 :(得分:2)
根据C ++标准
3具有命名空间范围(3.3.6)的名称具有内部链接(如果是) 名称 - 变量,函数或函数模板 明确声明静态;或者,
至于你的陈述
PS:我了解到•内部变量的值被分配给 编译时间。
•在链接时为外部变量分配其值。
然后是错的。
在我看来,你试图混淆两个概念:静态存储持续时间和程序链接。
答案 1 :(得分:2)
初始化取决于静态变量的类型。
对于可以在编译时计算的基本类型和初始值,变量初始值应该放在可执行文件的一部分中,该部分映射到内存中,并在写语义上进行复制。
< / LI>但是,编译器还可以决定在运行时初始化static
变量,通常在main()
执行之前。但是afaik,唯一的限制是初始化在首次使用变量时完成,并且编译单元中的静态变量按照它们的写入顺序进行初始化(如果它们的初始化程序相互依赖)。
关键是,static
变量在被main()
调用的代码使用之前已初始化,但在初始化发生时未指定。编译器可以做它认为最有效的事情。
在任何情况下,静态变量都至少存在,直到main()
退出或exit()
被调用。我很确定C ++也会在终止进程之前调用析构函数,但我不知道。