我在c99标准中找到了这个
3.17.2
1 indeterminate value
either an unspecified value or a trap representation
上述说法我不清楚。
谁能解释一下这是什么以及它的优点和缺点是什么?
一些例子将受到高度赞赏。
两者(不确定值和陷阱表示)的区别是根本性的。在一种情况下,你没有已知的价值。在另一个中,您有一个已知无效的值。
我可以收集的不确定值的最简单示例:
int a;
int b = a;
没有与相关的确定“价值”的概念a
。它有某物(因为它占用内存)但它所具有的“内容”没有定义,因此是不确定的。总的来说,这个概念就像听起来一样简单:除非它已经被decided某物是什么,它不能用于任何具有确定性结果的评估(如果有帮助的话考虑 r 值)。
实际值取决于语言、编译器和内存管理策略。例如,在大多数 C 实现中,未初始化的作用域变量或调用 malloc 返回的指针所指向的内存将包含先前存储在该地址的任何值。另一方面,大多数脚本语言会将变量初始化为某个默认值(0、“”等)。
关于陷阱表示,它本质上是超出与底层正式定义相关的允许值的限制范围的任何值。下面是一个希望不会令人困惑的例子。 :
enum FooBar { foo=0, bar=1 };
enum FooBar fb = (enum FooBar)2;
一般来说,它是落入底层存储表示所允许的空间内的任何位模式(在枚举中,可能是int
)但不被视为其正式定义的受限域的有效“值”。一个杰出的有关陷阱表示及其根源的描述可以在以下位置找到这个答案。以上只是一个代表very简单的已知无效表示可能会显示为。实际上,它在硬件中用于检测触发无效状态的值。我认为它们是“恐慌”价值观。再说一遍,上面的code在证明“价值”概念时纯粹是理想主义的,这不是“有效的”,但实际上是已知的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)