如果我知道只会使用现有元素,我可以在数组开头之前传递指针吗?



>我有一个代码,我在其中做了一些看起来像这样的事情:

double computeSometing(const double * parameters)
{
  return useValues(parameters - 10); 
  // in this special case, useValues only uses values that are 
  // at least at parameters[0] or after
}

这看起来很糟糕,但只有在我知道 useValues 不会在第 10 个之前使用任何值的情况下调用此代码(情况并非总是如此(,因此使用的所有值都在"内部"parameters。这是未定义的行为吗?我知道它仅适用于我使用过的所有编译器/平台,但这并不能定义它。

我这样做是为了避免将parameters的内容复制到具有 10 个元素的新数组中,因为此函数对性能敏感。

减法具有未定义的行为。

[expr.add]:

如果表达式P指向数组对象的元素x[i] x n元素,则表达式P - J指向(可能假设的(元素x[i − j]如果0 ≤ i − j ≤ n;否则,行为是未定义的。

请注意,生成值的行为本身是未定义的 - 您甚至不需要使用结果。

不,你不能。

指针算术仅在数组中有效,但您可以设置指针以指向数组的最后一个元素,为此,对象被视为单元素数组。读取此类超出范围的指针(更不用说取消引用它(的行为是未定义的。

您不能简单地将数组与偏移量(也许是 std::ptrdiff_t 类型(一起传递吗?

最新更新