<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    張慧的博客

    張慧的博客

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

    文章的樓主連左值都可以運算,還若無其事得當作可以編譯,在那講解,若無其事就算了,可以當做沒有發(fā)現(xiàn)編譯問題,但是那講解也太誤導人了吧?然后我跟帖的樓下還出現(xiàn)一個“石破天”,以教導式的口吻,在那講解,不知道的人豈不是就信了嗎?真真一群害人之馬,當然我只是指其中幾位,很多跟帖的朋友,我自認還是不如的。

    就為了這個影響廣泛的害人帖子(在csdn上彈框出來,影響能不小嗎?),我也來探討一下i++,我是菜鳥,我不會用教導式口吻來講解。

    首先說文章樓主提到的

    if((i++=j++)!=4){}  

    看到這句代碼我真想噴,因為這讓我對自己產(chǎn)生了不自信,還去編譯了一下,果然是錯誤的,左邊怎么能夠進行運算呢?樓主真強大...為什么昨天沒有寫文章,沒有情緒激動,因

    為我知道C++風格也是這樣賦值,不知道能不能編譯過去,但是今天看到跟帖的朋友說,VC98過不去,DEV-C++也過不去,我才感到真有一種被耍的感覺。“左值能運算嗎?What  the hell!"這一句,只是罵我自己懷疑自己,沒有對其他任何人。

    假設,樓主是手誤,咱們來一個正確的能編譯的代碼討論一下:

    int i=4,j=3;   
    if((i = j++) != 4) {}  

    j++的具體動作應該是怎樣的,我想看過《Thinking in Java》的朋友都掌握得還不錯,如果實在想找更深入一點探討i++的書,個人看過《Java程序員面試寶典》,里面有提到i++這個部分,講得很仔細。j++,是一個依賴于java里面的“中間緩存變量機制”來實現(xiàn)的,很多人都會念++在前就是“先加后賦”,++在后就是“先賦后加”,但是這個“賦”和這個“加”是針對哪個對象呢,有幾個人能清楚的解釋?“寶典”這本書上面的解釋,個人覺得非常好,就來這里秀一段。首先,像文章中2樓所說那樣:++的時間是以整個語句為衡量的,所以,什么時候自增,跟一整句運算語句有關,現(xiàn)在的情況是 i = j++:這樣一句應該被拆分為:

     

    temp = j;//先賦
    j = j + 1;//后加
    i = temp;

     

    再來一個i = ++j:這一句應該被拆分為:

    j = j + 1;//先加
    temp = j;//后賦
    i = temp;

    用這樣的語句,來解釋“賦”跟“加”應該是很明了的吧?記住,“加”只涉及了本身,“賦”涉及本身和中間緩存變量。

    如何理解“++的時間是以整個語句為衡量的”?咱們來一段復雜的就可以很好地理解了,就拿那個被我噴的“石破天”的吧。

     

    /* 這個是原式,尊重版權(quán),但是誤導人*/
    int i=10;
    i=i++ + i++;//20  --這里應該會是21,note by jacob
    i=++i + ++i;//44  --這里應該會是45,note by jacob
     

     

    首先咱們把這都拆開來理解:

    /* 細說第一個 i = i++ + i ++; */
    temp1 = i;//temp1 == 10
    i = i + 1;//i == 11;
    temp2 = i;//temp2 == 11
    i = i + 1;//i == 12;
    i = temp1 + temp2;//i == 21

    /*第二個 i = ++i + ++i;*/
    i = i + 1;
    temp1 = i;
    i = i + 1;
    temp2 = i;
    i = temp1 +temp2;


    這樣的例子,應該算是比較復雜的吧?如果需要,還可以來一個更加復雜的,不過不再詳細解釋,大家可以拿來推敲一下:

    int j =0,k = 0,h=0;
    k = k++ + k++ + k++ + ++k;//k == 7
    j = ++j + j++ + j++ + j++;//j ==7;
    h = ++h + ++h;
    posted on 2012-08-01 21:56 張慧 閱讀(2827) 評論(1)  編輯  收藏

    Feedback

    # re: 探討i++和++i 2012-08-02 12:37 Unmi
    ++ 拿出來做學術(shù)研究還是可以的,但它也是依賴于編譯器的,是怎么個理,反匯編,或是看看字節(jié)碼碼就知道的清清楚楚了。

    但要是工程中也寫出 ++,-- 隨意飛的代碼,那就要拖出去打屁股了,當然學生除外。  回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 中出五十路免费视频| 久久久久久国产精品免费免费| 久久亚洲精品无码| 国产精品永久免费10000| 日韩色日韩视频亚洲网站| 亚洲女久久久噜噜噜熟女| 国产福利在线观看免费第一福利| 羞羞视频免费网站含羞草| 亚洲Av熟妇高潮30p| 国产免费一区二区三区VR| 国产精品免费观看调教网| 亚洲av无码专区国产不乱码| 久久精品国产亚洲沈樵| 成年美女黄网站色大免费视频| 中国黄色免费网站| 亚洲乱色熟女一区二区三区蜜臀| 国产亚洲精品美女久久久| 成人免费淫片在线费观看| 国产午夜无码精品免费看动漫 | 亚洲伊人久久大香线蕉AV| 午夜在线亚洲男人午在线| 亚洲国产综合无码一区二区二三区| 免费看搞黄视频网站| 精品亚洲成a人在线观看| 91久久亚洲国产成人精品性色| 哒哒哒免费视频观看在线www| 久久99国产综合精品免费| 一级毛片免费在线观看网站| 456亚洲人成在线播放网站| 亚洲国产精品VA在线观看麻豆| 又粗又大又长又爽免费视频| 4hu四虎最新免费地址| 国产成人无码区免费内射一片色欲| 色噜噜噜噜亚洲第一| 亚洲人成高清在线播放| 国产成人亚洲综合色影视| 免费va人成视频网站全| 啦啦啦www免费视频| 青青草a免费线观a| 100部毛片免费全部播放完整| 99re6在线视频精品免费|