该问题出现在答案的评论的问题Is C/C++ bool type always guaranteed to be 0 or 1 when typecast'ed to int?正在读取一个不确定的值未定义的行为?
有问题的代码分配的bool
(本地)阵列而不初始化它们的值。
const int n = 100;
bool b[n];
很明显,b
中的值是不确定的。
一些评论者认为阅读例如b[0]
是未定义的行为。这是C++标准中的任何地方吗?我仍然相信相反的:
有明确的存储分配和基本布尔类型的初始化是完整的,因为它没有一个构造函数。因此,它肯定与取消引用未初始化的指针或调用未初始化的非重要对象上的方法/转换运算符相同。这些具体情况似乎已被标准覆盖。
C:What happens to a declared, uninitialized variable in C? Does it have a value?中的行为确实未定义,有些受访者似乎混淆了这两者。
在最新的C++ 0x草稿中,我找不到不确定值的定义尤其没有定义允许访问这样的值来触发处理器陷阱。事实上,Bjarne的Stroustrup的是不知道的inderminate值可能是什么:http://zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html
呵呵,“未定义的行为”在StackOverflow中是一个非常喜欢的术语,它用于从定义的实现,直到未定义的实际定义。 – 2010-11-25 16:54:13
我的意思是谚语中的“鼻魔”种类未定义。 – Sebastian 2010-11-25 16:57:30