我有两个双精度数组x
和y
整数i
。我的问题是声明是否:
double res = x[i] * y[i++];
总是等于语句:
double res = x[i] * y[i];
i++;
是否有可能某些编译器会x[i] * y[i++]
变成y[i++] * x[i]
,这显然会产生不同的结果?
我有两个双精度数组x
和y
整数i
。我的问题是声明是否:
double res = x[i] * y[i++];
总是等于语句:
double res = x[i] * y[i];
i++;
是否有可能某些编译器会x[i] * y[i++]
变成y[i++] * x[i]
,这显然会产生不同的结果?
否 -x[i] + y[i++]
具有未定义的行为。您正在修改 1 的值i
并使用该值i
而没有中间序列点,这会产生未定义的行为1。
不,当增量发生时它是未定义的。
代码修改i
并使用它的值而没有中间的序列点,因此行为是未定义的。语言定义在这里没有强加任何要求。