You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

空指针允许加零吗?MyArray类end()实现及指针运算合法性咨询

问题解答

一、原始end()实现是否合法可行?

答案是合法且可行,完全不需要额外加(arraySize == 0) ? nullptr : ...的条件判断。

根据C标准(C11及后续版本)的[expr.add]章节规则:

若指针p是空指针,则表达式p + 0和0 + p的行为是定义良好的,结果等于p本身。

当数组为空时,arrayBegin是nullptr且arraySize为0,此时arrayBegin + arraySize等价于nullptr + 0,完全符合标准要求,结果就是nullptr,和条件判断版本的返回值完全一致。

二、nullptr - nullptr是否被允许?

答案是不允许,属于未定义行为。

C++标准[expr.add]章节对指针减法的规则明确:

只有当两个指针指向同一个数组对象的元素,或者其中一个指向该数组末尾之后的位置时,指针减法的结果才是定义良好的。

两个nullptr并不指向任何实际存在的数组对象,也不属于“数组末尾之后的位置”(这个位置仅针对真实存在的数组而言),因此nullptr - nullptr的行为是标准未定义的——虽然部分编译器可能会返回0,但这不是标准强制要求的,在不同编译环境或优化等级下可能出现意外结果,绝对不能依赖这个操作。


内容的提问来源于stack exchange,提问作者Jarek C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:15:33