论坛首页 Java企业应用论坛

同样的代码在java和C++中结果却不同

浏览 2156 次
精华帖 (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++结果如下:

C++结果

 

java中代码如下:

 

public static void main(String[] args) {
		int a = 0;
		a+=(a=8);
		System.out.println("a="+a);
	}

 

Java结果如下:

java中的结果

 

  • 描述: C++结果
  • 大小: 620 Bytes
  • 描述: Java结果
  • 大小: 1.2 KB
   发表时间:2012-12-19  
沙发自己在坐。 有点搞不懂为什么代码一样,但是结果去不同呢?
0 请登录后投票
   发表时间:2012-12-19  
不同的语言为什么执行顺序要一样?
0 请登录后投票
   发表时间: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。
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics