C#和C++的一个有意思的差别

看到一篇有意思的文章:http://blogs.msdn.com/lucabol/archive/2004/08/31/223580.aspx

“x+=x++”的结果是什么?如果是C++,由于C++标准没有规定运算符“+”的左右两边的子表达式的运算顺序,所以结果是未定义的。而C#标准则明确规定了“+”的两边的运算顺序是从左到右,所以是可以得到“x+=x++”的确切的值的。

比如x = 3,下面是C#编译器的解释顺序:
1、首先解释“+=”,将表达式转为“x = x + (x++)”;
2、先计算“+”左边的值:“x = 3 + (x++)”;
3、然后是“x++”,得到:“x = 3 + 3”,同时x被赋值为4;
4、最后“x = 6”,覆盖了上一步赋值结果4。

由于顺序是可以得到确定的,所以还可以得知:

“x = (x++) + x”的结果和“x = x + (x++)”的结果是不一致的。

同样x = 3,“x = (x++) + x”的结果是这样:
1、首先解释“(x++)”,表达式转为:“x = 3 + x”,同时x这时被赋值为4;
2、接着解释“+”右边,表达式转为:“x = 3 + 4”;
3、最后“x = 7”。

结论:YOU ARE NOT GOING TO WRITE THAT CODE...

posted on 2004-09-01 11:53  kaneboy  阅读(189)  评论(0编辑  收藏  举报

导航