|
发表于 2014-6-15 00:20:23
|
显示全部楼层
本帖最后由 santaclaus 于 2014-6-15 14:17 编辑
verilog123 发表于 2014-6-14 22:57
请问如果是
x=5;
y=x++*x++;
y=25;
y=--y * --y * --y
这种表达式,是这样处理的
--y表示要立即更新y,当计算机扫描该表达式,发现有3个的--y,就立即更新y3次,即y减3,所以
y=22*22*22
再比如y=--y * ( y-- * --y )——既有y--也有--y的,怎么处理?
同样的道理,当发现--y时会立即更新y,y--会把y的更新延迟到表达式结束时。
因此计算机扫描该表达式,发现有两个--y,就立即y-2下来,
所y=23*(23--)*23=12167,里面的23--,表示先取23,最后在表达式结束时再y--,得y=12167-1=12166。
结论:计算机完整扫描一遍表达式,发现有几个--y,立即更新几次。
不管发现有几个的y--,都是在表达式结束的时候再执行几次y--
因此,我认为这两个等式在计算机看来,是等价的y=--y * ( y-- * --y ) <==>y=--y * y-- * --y
本来这个问题我也迷茫,看汇编的代码后,发现好象是这样处理的。
但因试验的例子较少,不知结论是否正确。
当然,不同的编译器处理方式可能也不同!
|
|