外部变量是否初始化为默认值?

3
我知道如果一个字符数组是全局或静态局部变量,它的元素会初始化为 \0,但如果字符数组是一个外部变量呢?
4个回答

3
如果变量被声明为 extern 但不是全局变量,它也会接收相同的初始化处理。例如:
namespace A { extern int x; int x;}

这个非全局变量将被初始化为零。所有命名空间范围的变量都会接收到这种处理。

3

extern仅是一个声明。变量是否被初始化取决于定义

此外,变量的值取决于初始化类型。 C ++标准定义了3种初始化类型:

  • 零初始化
  • 默认初始化
  • 值初始化

C++03标准8.5/5恰当地定义了每个术语的含义。

好文章阅读:

定义和声明有什么区别?


4
声明为 extern 的变量总是会被初始化。 - Johannes Schaub - litb
@JohannesSchaub-litb:是的,这个值将取决于初始化的类型。 - Alok Save
你的回答表明你的“是的,它会”的前提是它是否为全局变量。你的意图是什么? - Johannes Schaub - litb
@JohannesSchaub 这是因为变量必须存在于链接中,而不是因为它是外部的。 - SomeWittyUsername
@JohannesSchaub-litb:嗯...在第二遍阅读时,你是正确的,它似乎是离题的。我修改了它。 - Alok Save

3
外部变量只是一个声明。该变量在定义它的模块中进行初始化。由于在该模块中,该变量是全局的,因此它会被初始化为零。

1

extern关键字仅声明变量的存在,而不定义其值。由于全局作用域,它被初始化为0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接