• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            孤星
            孤星
                   我現在還是一名在校的大學生,不過2006 年我會走出校園,成為社會上的一員,我現在深感到我的計算機專業知識的不足。所以想通過網上學習,來提高自身,我也希望有更多的朋友,來一起學習C++等系列課程,需心請教!
                   上一次,有人遇到這樣一個問題,也許現在已經解決了,但我還是要將這個問題,分析一下,!
            問題是這樣的:

            #include "iostream.h"
             int main( )
            {   int i = 3 ;
                int sum = (i++) + (i++) + (i++);
                cout << sum;

                }
              在VC 6、0  結果是 16,我認為是這樣的, 在VC里 先將 前兩個i ++  相加,兩次 i++ 為5+5=10 ,再和第三個 i 相加,結果就是十六了,不知有何高見!
            posted on 2005-12-25 19:44 孤星 閱讀(612) 評論(15)  編輯 收藏 引用
            Comments
            • # re: 初來乍到
              梁宇翔
              Posted @ 2005-12-25 20:27
              這樣寫代碼會被罵的,int sum = (i++) + (i++) + (i++);
              sum的結果有可能是隨機的。
              如果不是無聊到了極點的話,
              還是不要這樣寫吧。
              這是我的建議:
              int x = i++;
              int sum = x*3;  回復  更多評論   
            • # re: 初來乍到
              zhy
              Posted @ 2005-12-25 21:52
              不知道你怎么得到的16
              不過事實上是9
              你在cout《i時i為6;
              同意樓上的說法。  回復  更多評論   
            • # re: 初來乍到
              Ying-Shen
              Posted @ 2005-12-25 22:09
              int sum = (i++) + (i++) + (i++);

              這個中國大學計算機系老師自認為是C語言中重要的知識點的地方,
              在C++的標準里面就一句the result is compiler specific就結束了。

              就是這個小地方浪費了每個中國大學計算機系學生的時間,并且對計算機編程
              認識造成重大誤導。并且這個錯誤還在一屆屆的延續下去。。。。。中國計算機教育界的悲哀。。。

                回復  更多評論   
            • # re: 初來乍到
              huangyi
              Posted @ 2005-12-25 23:26
              如果你的目的是研究vc編譯器的話...
              如果你上面16的說法正確的話(沒試過) 那vc的這種方法似乎有點不人道啊 呵呵  回復  更多評論   
            • # re: 初來乍到
              hehehe
              Posted @ 2005-12-25 23:44
              the result is compiler specific這句話我喜歡。。。  回復  更多評論   
            • # re: 初來乍到

              Posted @ 2005-12-26 10:28
              這個中國大學計算機系老師自認為是C語言中重要的知識點的地方,
              在C++的標準里面就一句the result is compiler specific就結束了。

              就是這個小地方浪費了每個中國大學計算機系學生的時間,并且對計算機編程
              認識造成重大誤導。并且這個錯誤還在一屆屆的延續下去。。。。。中國計算機教育界的悲哀。。。

              嚴重同意這個!  回復  更多評論   
            • # re: 初來乍到
              50米
              Posted @ 2005-12-26 15:04
              呵呵順序點的情況估計不少人都沒有聽過吧,^_^托大了呵呵:)

              下面舉例說明吧呵呵。
              int m=1;
              int n;
              n=m++ + m++;
              請回答結果是多少?

              正確回答是:不知道!語言沒有規定它應該算出什么,結果完全依賴具體系統在具體上下文中的具體處理。其中牽涉到運算對象的求值順序和變量修改的實現時刻問題

              a = 4; cout << a++ << a;

              這種東西根本不該寫,討論其效果沒有意義。

              我們知道它是
              (cout.operator <<(a++)).operator << (a);
              的簡寫。先看外層函數調用,這里需要算出所用函數(由加下劃線的一段得到),還需要計算a 的值。語言沒有規定哪個先算。如果真的先算函數,這一計算中出現了另一次函數調用,在被調函數體執行前有一個順序點,那時a++ 的副作用就會實現。如果是先算參數,求出a 的值4,而后計算函數時的副作用當然不會改變它(這種情況下輸出兩個4 )。當然,這些只是假設,實際應該說的是:這種東西根本不該寫,討論其效果沒有意義。


              程序語言通常都規定了執行中變量修改的最晚實現時刻(稱為順序點、序點或執行點)。程序執行中存在一系列順序點(時刻),語言保證一旦執行到達一個順序點,在此之前發生的所有修改(副作用)都必須實現(必須反應到隨后對同一存儲位置的訪問中),在此之后的所有修改都還沒有發生。在順序點之間則沒有任何保證。對C/C++ 語言這類允許表達式有副作用的語言,順序點的概念特別重要。  回復  更多評論   
            • # re: 初來乍到
              味全每日C++
              Posted @ 2005-12-27 16:55
              不要太苛求語法..
              追求這樣的細節不利于自己的提高:)  回復  更多評論   
            • # re: 初來乍到
              LOGOS
              Posted @ 2005-12-27 17:11
              關于這個問題,我也差異了一下,不過編譯成匯編后,就明白了:這些事情,是編譯器決定的事情.
              ; Line 11
              mov DWORD PTR _i$[ebp], 3
              ; Line 12
              mov eax, DWORD PTR _i$[ebp]
              add eax, DWORD PTR _i$[ebp]
              add eax, DWORD PTR _i$[ebp]
              mov DWORD PTR _sum$[ebp], eax
              mov ecx, DWORD PTR _i$[ebp]
              add ecx, 1
              mov DWORD PTR _i$[ebp], ecx
              mov edx, DWORD PTR _i$[ebp]
              add edx, 1
              mov DWORD PTR _i$[ebp], edx
              mov eax, DWORD PTR _i$[ebp]
              add eax, 1
              mov DWORD PTR _i$[ebp], eax  回復  更多評論   
            • # re: 初來乍到
              發咯簌簌
              Posted @ 2005-12-27 19:23
              VC6.0中運算結果是9。  回復  更多評論   
            • # re: 初來乍到
              rotcet
              Posted @ 2005-12-31 19:28
              c本身沒有對表達式的求值運算方式做規定,所以這是編譯器相關的,這種問題在真實開發中屬于不良代碼,不可以這樣寫  回復  更多評論   
            • # re: 初來乍到
              勾來斌
              Posted @ 2006-02-05 11:14
              基本同意梁宇翔和Ying-Shen
              這樣寫程序有誰知道其語義到底是什么
                回復  更多評論   
            • # re: 初來乍到
              yskin
              Posted @ 2006-02-22 11:48
              我前幾天也看到過,他說的是:
              int sum = (++i) + (++i) + (++i);

              有人說按照c++標準應該是18.但是vc6編譯出來是16.還有人說vc7.1出來是18.

              樓主既然記得16,一定是你把程序給記錯了。  回復  更多評論   
            • # re: 初來乍到
              unknown
              Posted @ 2006-04-19 17:39
              浪費時間  回復  更多評論   
            • # re: 初來乍到
              JJJ
              Posted @ 2007-09-07 15:06
              浪費時間  回復  更多評論   
             
            国产三级久久久精品麻豆三级| 香蕉久久夜色精品国产2020| 7777精品久久久大香线蕉| 狠狠色丁香婷婷综合久久来来去 | 国内精品人妻无码久久久影院| 久久影院久久香蕉国产线看观看| 99久久婷婷国产综合精品草原| 久久精品一区二区三区不卡| 久久九九亚洲精品| 99久久精品国产一区二区三区| 国产精品永久久久久久久久久| 国产精品99久久久久久www| 99久久综合狠狠综合久久| 久久99国产一区二区三区| 亚洲国产天堂久久综合| 亚洲中文字幕无码久久精品1| 亚洲∧v久久久无码精品| 9久久9久久精品| 国产日韩久久免费影院| 久久精品中文字幕大胸| 国产成年无码久久久久毛片| 久久久久久久综合日本亚洲| 久久综合给合综合久久| 99蜜桃臀久久久欧美精品网站| 成人久久综合网| 亚洲欧洲精品成人久久曰影片| 亚洲va久久久噜噜噜久久狠狠 | 久久久久久国产精品免费免费| 久久久精品久久久久特色影视| 久久国产免费直播| 久久综合九色综合97_久久久| 日本久久中文字幕| 无码专区久久综合久中文字幕| 2020最新久久久视精品爱| 久久精品人人做人人爽电影| 久久综合久久综合久久| 久久人妻无码中文字幕| 国产午夜精品久久久久九九电影 | 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 精品久久久久久99人妻| 色婷婷综合久久久久中文一区二区 |