首页 > 后端开发 > C++ > 在 C 中可以明确定义取消引用 NULL 指针以获取引用吗?

在 C 中可以明确定义取消引用 NULL 指针以获取引用吗?

Patricia Arquette
发布: 2024-12-11 04:48:11
原创
265 人浏览过

Can Dereferencing a NULL Pointer to Get a Reference Be Well-Defined in C  ?

可以取消引用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板