【问题标题】:Is it allowed to add a zero to a null pointer?是否允许向空指针添加零?
【发布时间】:2020-04-12 00:14:41
【问题描述】:

我知道空指针不允许指针算术。但是想象一下我有这样的东西:

class MyArray {
  int *arrayBegin;  // pointer to the first array item, NULL for an empty array
  unsigned arraySize;   // size of the array, zero for an empty array
public:
  int *begin() const { return arrayBegin; }
  int *end() const { return arrayBegin + arraySize; }  // possible? (arrayBegin may be null)

是否有可能(允许)进行上述end() 实现?还是必须要有:

  int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }

要避免使用 nullptr 进行指针运算,因为 arrayBegin 对于空数组为空(尽管在这种情况下 arraySize 也为零)?

我知道可以存储int *end; 而不是unsigned size; 并将大小计算为end-begin - 但同样的问题出现了:是否允许计算nullptr - nullptr

我会特别感谢标准参考。

【问题讨论】:

    标签: c++ null pointer-arithmetic


    【解决方案1】:

    是的,您可以将零指针添加到空指针并从另一个空指针中减去一个空指针。引用 C++ 标准的加法运算符 [expr.add] 部分:

    当具有整数类型的表达式J 被添加到指针类型的表达式P 或从其减去时,结果的类型为P

    • 如果P 的计算结果为空指针值,而J 的计算结果为0,则结果为空指针值。

    【讨论】:

    • 什么是“8.7 7”?如果您参考 C++ 标准,请指定哪一个。一般来说,最好在括号中使用章节“名称”,因为章节/章节/段落编号通常会随着每个标准版本而变化。在目前的草案中,相关部分是[expr.add]段落4.15.1
    猜你喜欢
    • 2023-03-04
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多