例如,在以下代码中:
int myarray[3];
int x = myarray[1];
代码是否保证在恒定时间内成功执行,并x
具有一些整数值?或者编译器是否可以完全跳过为此发出代码/发出代码以启动 GNU Chess 并且仍然符合 C++ 标准?
这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化。(抱歉,手边没有我的 Aho、Hopcroft 和 Ullman 的副本,所以找不到名字。)
例如,在以下代码中:
int myarray[3];
int x = myarray[1];
代码是否保证在恒定时间内成功执行,并x
具有一些整数值?或者编译器是否可以完全跳过为此发出代码/发出代码以启动 GNU Chess 并且仍然符合 C++ 标准?
这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化。(抱歉,手边没有我的 Aho、Hopcroft 和 Ullman 的副本,所以找不到名字。)
这是未定义的行为。
根据标准([dcl.init] 第 12 段),
如果没有为对象指定初始化程序,则该对象是默认初始化的。当获得具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,如果没有对该对象执行初始化,则该对象将保留一个不确定的值,直到该值被替换......如果一个不确定的值是由评估产生的行为是未定义的,除非在以下情况下
以下所有情况都解决了无符号窄字符类型的访问 or std::byte
,这可能导致不确定的值而不是未定义的值。
访问任何未初始化的数据都是未定义的行为。