可以取消引用 NULL 指针来获取引用吗?
C 标准将取消引用 NULL 指针定义为未定义行为。但是,涉及 NULL 指针取消引用以获得引用的代码片段(如下所示)会引发问题:
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
标准定义:
根据 C 标准(8.3.2/4“引用”),明确定义的程序中不能存在空引用。这是因为创建这样的引用需要将其绑定到通过取消引用空指针获得的“对象”,这构成了未定义的行为。
实现细节还是明确定义的?
实际上,提供的代码片段会导致 ptr2 设置为 NULL。然而,这只是一个实现细节。标准明确规定取消引用空指针是未定义的。
取消引用 NULL 指针的影响:
通常,取消引用空指针会导致崩溃。在使用它来获取引用的特定情况下,编译器将引用实现为指针,从而消除了实际的取消引用操作。尽管如此,底层的未定义行为仍然存在。
异常:sizeof 运算符
以明确定义的方式取消引用空指针的例外是 sizeof 运算符。使用 sizeof 时,不会计算操作数,从而避免了取消引用操作。
以上是在 C 中可以明确定义取消引用 NULL 指针以获取引用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!