初始化一个 int 数组,其值少于声明的值,它只会添加 0 作为值吗?

Lig*_*ing 2 c++ arrays

我正在阅读 C++,该站点说如果你用较少的值初始化一个 int 数组,然后声明为这样

int x[6] = {19, 10, 8};
Run Code Online (Sandbox Code Playgroud)

它用随机数替换其余的值。“在这种情况下,编译器会为剩余的地方分配随机值。通常,这个随机值只是 0。”

我的问题是,这些值是否可以不为 0,即使很少见?

链接到站点https://www.programiz.com/cpp-programming/arrays

for*_*818 5

该网站是可怕的错误!

(在这一点上,我不知道其余的,但必须说清楚;)

他们的例子:

// store only 3 elements in the array
int x[6] = {19, 10, 8};
Run Code Online (Sandbox Code Playgroud)

此处,数组 x 的大小为 6。但是,我们仅使用 3 个元素对其进行了初始化。

在这种情况下,编译器会为其余位置分配随机值。通常,这个随机值只是 0。

找到错误的在线教程真的很常见,尽管他们甚至可以得到最基本的细节仍然令人震惊。

当您点击此cppreference页面底部关于 C++ 中的数组的链接到有关 C 中的数组初始化页面时,您可以找到一个正确的示例(cppreference 是一个相当可靠的资源,因为它是一种协作努力,错误不会存在长):

int y[5] = {1,2,3}; // y has type int[5] and holds 1,2,3,0,0
Run Code Online (Sandbox Code Playgroud)

并在同一页面上(仍然是 C):

所有未显式初始化的数组元素都是零初始化的。

C++ 中的区别在于其余元素是值初始化的(这意味着0对于ints)。您可以在此处找到 C++ 标准中的相关部分(感谢@Mat 提供链接):http ://eel.is/c++draft/dcl.init#general-16.5 。

请注意,每当您读到没有初始化程序的内容正在获得“随机”值时,您都需要小心,因为那是没有意义的。未初始化的变量永远不会被分配随机值!如果某些东西未初始化,则称其具有不确定的值。不确定的值不是随机的。

TL; 博士

我的问题是,这些值是否可以不为 0,即使很少见?

编译器不会为这些元素分配随机值。为什么编译器会做这样的事情?他们保证是0

  • http://eel.is/c++draft/dcl.init#general-16.5 - 额外的元素在 C++ 中进行值初始化(因此整数为零) (3认同)