C# 编译器优化&;增量

C# 编译器优化&;增量,c#,optimization,compiler-construction,increment,C#,Optimization,Compiler Construction,Increment,编译器优化会导致这样的代码出现问题吗?具体而言,是否可以按照正确的顺序回复自动增量以进行评估 uint result = (array[i++] << 16) | (array[i++] << 8) | array[i++]; uint result=(数组[i++] 委员会: 表达式中的操作数是 从左到右计算。对于 例如,在F(i)+G(i++)*H(i)中, 使用旧值调用方法F 对于i,则使用 i的旧值,以及方法H 使用新值i调用。 这是独立于和无关的 运算符优先级

编译器优化会导致这样的代码出现问题吗?具体而言,是否可以按照正确的顺序回复自动增量以进行评估

uint result = (array[i++] << 16) | (array[i++] << 8) | array[i++];
uint result=(数组[i++]

委员会:

表达式中的操作数是 从左到右计算。对于 例如,在
F(i)+G(i++)*H(i)
中, 使用旧值调用方法
F
对于
i
,则使用
i
的旧值,以及方法
H
使用新值
i
调用。 这是独立于和无关的 运算符优先级


不,我认为您正在序列点之间多次修改对象(I)。IIRC不是按位或,也不是数组索引是序列点。您只允许修改对象一次,否则将是未指定或未定义的行为

注意,这不一定是优化器的问题,只是不合法


编辑:这里有一个关于序列点的链接-< /p>错。这是C++,不是C++。doh!我的错误,我读错了标签。它会咬任何从C到C++的人,所以我不会这么做。- -)——安迪:错了。这总是正确的。