解引用 NULL 指针以供参考:解释和标准
在 C 中,以下代码提出了标准规定的问题:
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
具体来说,是否允许取消引用 NULL 指针来获取引用,这样的操作的结果是什么?
标准解释
根据 C 标准,取消引用 NULL 指针被视为未定义行为。标准第 8.3.2/4 节明确说明了这一点:
注意:特别是,空引用不能存在于明确定义的程序中,因为创建此类引用的唯一方法是将其绑定到通过取消引用空指针获得的“对象”,这会导致未定义的行为。
实现含义
然而,在实践中,许多编译器通过将结果设置为 NULL 来实现此行为。这意味着所提供的代码片段中的 ptr2 将被赋予 NULL 值。
编译器解释
需要注意的是,上述行为不能由标准,并且可能因不同的编译器和平台而异。例如,某些编译器在取消引用 NULL 指针时可能会引发异常或执行其他特定于平台的操作。
特定异常
此规则的一个例外是使用NULL 指针上的 sizeof 运算符。在这种情况下,取消引用实际上不会发生,并且 sizeof 可用于确定类型的大小,而不会导致未定义的行为。
以上是取消引用 NULL 指针以获得 C 中定义的行为的引用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!