1

例如,在以下代码中:

int myarray[3];
int x = myarray[1];

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

这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化。(抱歉,手边没有我的 Aho、Hopcroft 和 Ullman 的副本,所以找不到名字。)

4

2 回答 2

8

这是未定义的行为。

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

如果没有为对象指定初始化程序,则该对象是默认初始化的。当获得具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,如果没有对该对象执行初始化,则该对象将保留一个不确定的值,直到该值被替换......如果一个不确定的值是由评估产生的行为是未定义的,除非在以下情况下

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

于 2018-04-06T16:27:33.010 回答
-3

访问任何未初始化的数据都是未定义的行为。

于 2018-04-06T16:04:41.317 回答