C++ 外部变量是否初始化为其默认值?
我知道,如果字符数组是全局或静态局部数组,其元素将初始化为\0,但如果字符数组是外部变量呢?C++ 外部变量是否初始化为其默认值?,c++,extern,C++,Extern,我知道,如果字符数组是全局或静态局部数组,其元素将初始化为\0,但如果字符数组是外部变量呢?extern只是一个声明 变量是否初始化取决于定义 此外,变量的值将取决于初始化的类型。C++标准定义了3种初始化: 零初始化 默认初始化 值初始化 C++03标准8.5/5恰当地定义了每一个 读得好: 外部变量只是一个声明。变量在定义它的模块中初始化。由于该模块中的变量是全局变量,因此初始化为零。关键字extern仅声明变量存在,而不定义其值。 由于全局作用域的原因,如果变量声明为extern但不是
extern
只是一个声明变量是否初始化取决于定义 此外,变量的值将取决于初始化的类型。C++标准定义了3种初始化:
- 零初始化
- 默认初始化
- 值初始化
外部变量只是一个声明。变量在定义它的模块中初始化。由于该模块中的变量是全局变量,因此初始化为零。关键字
extern
仅声明变量存在,而不定义其值。
由于全局作用域的原因,如果变量声明为extern但不是全局变量,那么它也会收到相同的初始化处理。比如说
namespace A { extern int x; int x;}
此非全局变量将初始化为零。所有命名空间作用域变量都接受此处理。声明为extern的变量将始终被初始化。@Johanneschaub litb:是,该值将取决于初始化的类型您的anwswer表示不是,因为您的“是”将取决于它是否是全局的。你的意图是什么?@johanneschaub这是因为链接必须存在变量,而不是因为它是extern@JohannesSchaub-利特:嗯……你在第二次阅读时是正确的,它似乎是相切的。修改了它。