Vin*_*ond 5 c++ arrays pointers pointer-arithmetic language-lawyer
我有一个代码,其中执行如下操作:
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
}
Run Code Online (Sandbox Code Playgroud)
这看起来很糟糕,但是仅在以下情况下才调用此代码:在这种情况下,我知道useValues在10号之前不会使用任何值(情况并非总是如此),因此所使用的所有值都是“ inside” parameters。那是不确定的行为吗?我知道它只能在我使用过的所有编译器/平台上运行,但这并没有定义它。
我这样做是为了避免将其内容复制parameters到具有10个以上元素的新数组中,因为此函数对性能敏感。
减法具有不确定的行为。
[expr.add]:
如果表达式
P指向元件x[i]阵列对象的x与n元素,[...]的表达P - J指向(可能-假设的)元件x[i ? j],如果0 ? i ? j ? n; 否则,行为是不确定的。
请注意,产生值的行为本身是不确定的-您甚至不需要使用结果。
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |