问题出现在对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++标准的任何地方都有说明吗?我仍然坚信相反的说法:
  • 显然已经分配了存储空间,并且基本bool类型的初始化已经完成,因为它没有构造函数。因此,它肯定与取消引用未初始化的指针或在未初始化的非平凡对象上调用方法/cast运算符不同。这些特定情况似乎已包含在标准中。
  • 该行为的确在C中未定义:What happens to a declared, uninitialized variable in C? Does it have a value?,一些响应者似乎将二者混淆。
  • 在最新的C++ 0x草案中,我找不到不确定值的定义,尤其是找不到允许访问该值以触发处理器陷阱的定义。的确,Bjarne Stroustrup不确定该值是什么:http://zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html
  • 最佳答案

    是的,形式上不确定值的右值转换是UB(除了unsigned char,最初我写了“和variants”,但是当我记忆起正式迎合1的补码字符时,可能用负0作为陷阱值)

    我太懒了,无法为您做标准段落查找,也懒得关心它的降票

    但是,在实践中,只有一个问题是(1)古老的体系结构,也许是(2)64位系统。

    编辑:糟糕,我现在似乎想起了一个博客发布以及有关用于访问不确定char的正式UB的相关缺陷报告。因此,也许我将不得不实际检查标准+搜索DR。嗯,那将是稍后的时间,现在是咖啡!

    EDIT2 :Johannes Schaub非常友善地提供了这个link to SO question,其中讨论了用于访问char的UB。所以,这就是我想起它的地方!谢谢,约翰尼斯。

    干杯和健康。,

    10-08 03:55