第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么 下面這段代碼 C++ 和 Java 在 上不同?i+=i-=i*=i

為什么 下面這段代碼 C++ 和 Java 在 上不同?i+=i-=i*=i

揚(yáng)帆大魚 2018-11-09 11:11:01
#include<stdio.h>//在C++中的結(jié)果int Change(int i);main(){int i=7;int j=Change(i);printf("%d ,  %d",i,j);} int Change(int i){return i+=i-=i*=i;} /*,  0-----------------------------------------------Process returned: 0 (0x0)Execution time: 14 msMaximum memory use: 407 KB-----------------------------------------------Press any key to continue . . .*///在 Java中的運(yùn)行結(jié)果/** * Created by Xi Yin on 2016/9/8. */public class TestPlusPlus {public static void main(String[] args){int i=6;        System.out.println(i);int j=Change(i);        System.out.println("Value1: "+i+" Value2: "+j);    }public static int Change(int k){return k+=k-=k*=k;    }}/**Value1: 6 Value2: -24Process finished with exit code 0* */
查看完整描述

4 回答

?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

關(guān)于?i+=i-=i*=i

其中運(yùn)算符的優(yōu)先級(jí)和結(jié)合性在 C++ 和 Java 中是一樣的,所以和這個(gè)沒關(guān)系。

C++ 和 Java 在這里的區(qū)別是對(duì)具體執(zhí)行過程的規(guī)定不同!? 準(zhǔn)確地說,Java 對(duì)此有明確的規(guī)定,這個(gè)表達(dá)式能得到確切的結(jié)果;而在 C++ 中這個(gè)表達(dá)式的行為是“未定義”的。


C++ 標(biāo)準(zhǔn)對(duì)于運(yùn)算符表達(dá)式的執(zhí)行過程有一個(gè)復(fù)雜的“序列點(diǎn)”(或新的“先序”)規(guī)則。而這些規(guī)則對(duì)于一些運(yùn)算符執(zhí)行的某些過程沒有作出明確的規(guī)定,實(shí)際代碼可以以任意可能的方式執(zhí)行,這就是 C++ 的所謂“未定義行為”。

你給出的這個(gè)表達(dá)式中就正好涉及這點(diǎn)。 關(guān)于這個(gè)復(fù)雜的規(guī)則的解說請(qǐng)參考我之前的回答:http://idcbgp.cn/qadetail/87888

你這里連續(xù)使用的復(fù)合賦值運(yùn)算符也是有“副作用”的,而這些副作用的發(fā)生順序也是未定義的,所以,在 C++ 中這樣的代碼可以得到各種結(jié)果。你不應(yīng)該在 C++ 中這樣寫,這算是錯(cuò)誤的代碼。

順便說下,C++ 這樣做并不是不嚴(yán)謹(jǐn),這是為適配不同底層硬件和提高執(zhí)行效率而有意為之。這是 C++ 的靈活性之一,也是它復(fù)雜(有坑)的地方。程序員必須很熟悉這些語法細(xì)節(jié)才能寫出正確的代碼。


Java 就比較簡(jiǎn)單了,它對(duì)此有明確的規(guī)定,所以最后會(huì)得到確定的結(jié)果。詳細(xì)解釋請(qǐng)參考我在這里的回答:http://idcbgp.cn/wenda/detail/387946


查看完整回答
反對(duì) 回復(fù) 2018-11-16
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

兩門不同的語言,語法細(xì)節(jié)上的不同,很奇怪嗎?


查看完整回答
反對(duì) 回復(fù) 2018-11-14
?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

那就是符號(hào)優(yōu)先級(jí)的問題唄,這種代碼還是少寫。。。畢竟,編程不是炫技。。。

兩種都是從后往前運(yùn)算,但是運(yùn)算過程中,Java的K的值一直沒變,所以Java等同于這樣:

k=6+6-6*6;最后是-24;

而C++是每次運(yùn)算完以后,i就變了,所以是:

i=i*i;這時(shí)候i是49;

i=i-i;這時(shí)候等于49-49,等于0;

i=i+i;這時(shí)候等于0+0,等于0;最后等于0


查看完整回答
反對(duì) 回復(fù) 2018-11-14
  • 4 回答
  • 1 關(guān)注
  • 1080 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)