浏览 2156 次
锁定老帖子 主题:同样的代码在java和C++中结果却不同
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-12-19
最后修改:2012-12-19
今天在一论坛中看到一道简单的问题,但是在java和C++中得到的结果却不相同 C++代码如下: #include <iostream> using namespace std; int main(){ int a = 0; a += (a=8); cout << "a=" << a << endl; return a; }
C++结果如下:
java中代码如下:
public static void main(String[] args) { int a = 0; a+=(a=8); System.out.println("a="+a); }
Java结果如下:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-12-19
沙发自己在坐。 有点搞不懂为什么代码一样,但是结果去不同呢?
|
|
返回顶楼 | |
发表时间:2012-12-19
不同的语言为什么执行顺序要一样?
|
|
返回顶楼 | |
发表时间:2012-12-20
不要折腾未定义行为了。
a += (a=8) 这个语句,其实执行的是 a+= 表达式(a=8)的结果。语言规范上并没有要求a=8这个表达式一定要在 a+=之前完成。只要在分号结束前执行完成就可以了。 计算机的编译结果和执行顺序未必就是你自己以为的顺序。以这个表达式而言,a=8这个表达式的结果是确定的,结果是8。完全可以把 a+= 8 和a=8编译成两个单独的指令进行执行。只要保证其在执行完分号前都执行了就可以了。如果你把8换成一个外部输入的参数,那么系统就可能编译出完全不一样的代码来, 再比如语句a=b=3,你说这个语句执行的时候,是先赋值给a还是先给b?其实是都可以的,完全看编译器自己怎么来,而不一定是绝对的从右到左执行。你那个C++的代码也许换一个编译器,换几个编译参数,结果也会变成8。 |
|
返回顶楼 | |