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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

揚帆大魚 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中的運行結(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貢獻883條經(jīng)驗 獲得超454個贊

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

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

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


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

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

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

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


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


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

TA貢獻1807條經(jīng)驗 獲得超9個贊

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


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

TA貢獻1921條經(jīng)驗 獲得超9個贊

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

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

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

而C++是每次運算完以后,i就變了,所以是:

i=i*i;這時候i是49;

i=i-i;這時候等于49-49,等于0;

i=i+i;這時候等于0+0,等于0;最后等于0


查看完整回答
反對 回復(fù) 2018-11-14
  • 4 回答
  • 1 關(guān)注
  • 1092 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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