编译器优化是否会导致这样的代码出现问题?具体来说,可以回复自动增量以按正确的顺序进行评估吗?
uint result = (array[i++] << 16) | (array[i++] << 8) | array[i++];
不,我认为您在序列点之间多次修改对象 (i)。 IIRC 按位或或数组索引都不是序列点。您只能修改该对象一次,否则是未指定或未定义的行为。
注意。这不一定是优化器的问题,只是不合法。
编辑:这是关于序列点的链接 - http://msdn.microsoft.com/en-us/library/d45c7a5d(VS.80).aspx