首页 > 后端开发 > C++ > 正文

为什么使用空指针访问静态类成员可以工作?

Linda Hamilton
发布: 2024-11-02 10:20:30
原创
648 人浏览过

Why Does Accessing Static Class Members with Null Pointers Work?

使用空指针访问静态成员

概述

许多人可能会发现使用空指针访问静态类成员不会导致运行时是违反直觉的错误。本文深入探讨技术细节来解释此行为并讨论潜在的陷阱。

空指针取消引用的评估

讨论的核心是空指针取消引用的评估。虽然通过未初始化的指针访问类成员通常是未定义的,但静态成员是一个例外。访问静态成员时,对象表达式(例如 d->a)本质上等同于 (*d).a。

丢弃值表达式的求值

在这种情况下,静态成员函数 fun 的参数是 d,它被计算但被丢弃。这是因为操作 *d 是一个被丢弃的值表达式,这意味着它仅针对其副作用进行评估(在本例中,没有副作用)。

通过空指针间接

问题的关键围绕通过空指针的间接寻址是否固有地导致未定义的行为。 C 标准在这个问题上提供了一些相互矛盾的指导。然而,一种广泛持有的解释是,仅通过空指针进行间接寻址,而不进行任何进一步的左值到右值转换或其他操作,不会调用未定义的行为。

空左值

在在 CWG-issue #232 的背景下,提出了“空左值”的概念来解决空指针取消引用的问题。然而,它从未被采用。

允许行为的基本原理

允许示例代码无错误执行的基本原理是,使用空指针调用静态成员函数不需要标识或对象的存储值。只需简单地访问静态成员的值,无需任何进一步的左值操作。

要避免的潜在陷阱

虽然通常允许使用空指针访问静态成员,但避免使用 .运算符访问非静态成员。非静态成员访问要求对象有效,这可能会导致使用空指针时出现未定义的行为。

以上是为什么使用空指针访问静态类成员可以工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!