设x的值为3,y=0,则表达式y=(++x)+(++x)后,y的值是( ),不同编译器会有不一样的答案。先写结果:
C++: y=10;
java: y=9;
matlab: y=6;
为什么会有这样的结果呢,到底哪个是对的?其实没有对错之分。原因是各编译器处理式子的方式不一样,这个在编译原理中我们学过。就是所谓的前缀表达式,中缀表达式,后缀表达式。什么意思呢?拿刚才的例子来说吧,C++的处理方式就是采用的后缀表达式,Java的处理方式就是采用的中缀表达式,matlab的处理方式就是采用的前缀表达式。C++先算的++x,x=4, 然后再++x, x=5,最后两个相加得10。Java是先算++x, 等于4,4再加上++4(即5)等于10。matlab是3+3=6,最后再算++。
有错的地方欢迎指正。
原文:http://blog.csdn.net/sunshihua12829/article/details/45341125