java代码
import javax.swing.*;
public class test12
{
public static void main(String[] args)
{
int a = 3;
a -= a += a * a;
System.out.println(a)
}
}
c++代码
#include <iostream>
using namespace std;
int main()
{
int a = 3;
a -= a += a * a;
cout << a << endl;
return 0;
}
为什么两个程序打印出的a的值不同,java是-9,c++是0
這個問題和運算子沒有關係,都是從右往左計算,而是編譯器對值類型的處理結果不一致所導致的差異。
對於gc類語言來說,包括(
java
,c#
,php
,javascript
)等,對於單句指令的中間運算結果會進行快取。而C/C++由於直接編譯為組譯指令,沒有虛擬機器或引擎的支持,所以不會有這一步。通俗點來說,對於c++:
也就是說a的值是值型,會隨時跟著a的變化而更新。無論初始設定a的值為幾,結果都是0。 (a-a).
然而對於其他語言,虛擬機器或引擎會自動保存每一步的計算結果。
以上。
引申:PHP 一個詭異的加法演算法的研究
不要糾結這個,在你感覺模糊的地方加上()就可以了。