在C++中,是访问未初始化的数组未指定的行为还是未定义的行为?

Mar*_*tin 0 c++ unspecified-behavior

例如,在以下代码中:

int myarray[3];
int x = myarray[1];
Run Code Online (Sandbox Code Playgroud)

代码是否保证在恒定时间内成功执行,x具有一些整数值?或者编译器是否可以跳过为这个完全/发出代码发出代码来启动GNU Chess并仍然符合C++标准?

这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化.(对不起,我没有Aho,Hopcroft和Ullman的副本,所以不能查找名字.)

120*_*arm 6

这是未定义的行为.

根据标准([dcl.init]第12段),

如果没有为对象指定初始化程序,则默认初始化该对象.当获得具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,并且如果没有对该对象执行初始化,则该对象保留不确定的值,直到替换该值...如果不确定的值是通过评估产生的行为是不确定的,除了以下情况

以下所有情况都解决了对无符号窄字符类型的访问,或者std::byte可能导致不确定的值而不是未定义的值.