C99和C ++ 03中空指针定义的差异

问题描述

N2431是介绍nullptr的论文。它说:

当前的C ++标准提供了一个特殊规则,即0既是整数常量又是a 空指针常量。来自[C ++ 03]第4.10节:

空指针常量是整数类型的整数常量表达式(expr.const) 计算结果为零。空指针常量可以转换为指针类型。结果是 该类型的null指针值,并且可以与指向的其他所有指针值区分开 对象或函数类型的指针。相同类型的两个空指针值应比较相等。 空指针常量到cv限定类型的指针的转换是一次转换,而不是指针转换后跟限定转换的顺序 (转化质量)。

此表述基于原始的K&R C定义,与 C89和C99。 C标准[C99]说(第6.3.2.3条):

值为0的整数常量表达式,或强制类型为void *的表达式为 称为空指针常量。[55]如果将空指针常量转换为指针类型,则 结果指针称为空指针,保证将不相等的指针与任何指针进行比较 对象或功能。

让我们忽略“ [c ++ 03公式是基于原始的K&R C定义”部分,而将重点放在“ [c ++ 03公式]与[C99]中的定义不同”。

我不清楚C ++ 03和C99定义在哪些方面有所不同。是的,它们在书面标准中有不同的正式定义(正如我们所看到的引用是不同的),但是从实际角度看这意味着什么?它们真的有区别吗?如果我正确地阅读了该文章,则其语气暗示存在差异。如果是这样,它们是什么?我无法根据标准的引用来理解/理解差异。

我没有具体询问如何定义,表示和/或实现C ++ 03或C99空指针。我的问题是有关C ++ 03和C99空指针定义(以及可能的实现,如果要说明这一点对回答这个问题来说很重要)的区别如何,答案可以包含对C ++ 03和C99定义的解释。 C99空指针,但仅作为展示差异或缺少差异的帮助点。也就是说,仅提供每个定义的定义或解释不被视为对此问题的答案。

我完全意识到nullptr是在C ++ 11及更高版本中表达空指针的首选方式。这不是问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)