• <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>
            posts - 3,  comments - 28,  trackbacks - 0

            ?

            class ?A
            {

            private :
            ????
            int ?i;
            public :
            ????A(
            int ?ii):i(ii) {} // cout<<i<<"??A()?"<<endl;
            ????A():i( 0 ) {}

            ????
            ~ A() {cout << " ~A( " << i << " )? " << endl;}

            ????
            const ?A? operator ? + ( const ?A? & r)? const
            ????
            {
            ????????
            return ?A(i + r.i);

            ????}

            }
            ;

            int ?main()
            {
            ????
            int ?i = 10 ,j = 20 ;
            ????
            // cout<<&(i+j)<<endl;?????????? // 這里為什么會出錯呢?
            ????A?a1( 10 ),a2( 20 ),a3( 30 ),a4( 40 );
            ????cout
            <<& (a1 + a2) << endl;??????? // 這里就應該是臨時變量的地址了吧
            ????system( " pause " );
            ????
            return ? 0 ;
            }



            既然這樣可以運行,那為什么內置的類型如:int float之類的不能取臨時對象的值呢?
            我重載的+號運算符應該沒有寫錯吧、、
            請大家指教。。謝謝我還只是一個初學者

            posted on 2006-02-12 22:12 豬頭餅 閱讀(1000) 評論(10)  編輯 收藏 引用 所屬分類: C++

            FeedBack:
            # re: [討論]臨時對象有地址么?
            2006-02-13 00:05 | 音樂蟲子
            i+j得到的是一個值,不存在你說說的臨時對象
              回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-02-13 00:19 | 梅阿查沒有眼淚
            謝謝你的回復
            那么:
            int foo()
            {
            return 10+20; //這個應該返回的是一個臨時對象了吧
            }
            //下面為什么這里還是會出錯呢?
            cout<<&foo();
              回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-02-13 09:50 | 蟲子
            int是值類型,不是類類型  回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-02-13 11:07 | 小明
            int foo()
            {
            return 10+20; //這個應該返回的是一個臨時對象了吧
            }


            如果你懂一些匯編,vc中,這個函數返回的時候,只是把結果30放到EAX
            mov eax ,30
            并不生成一個臨時對象
            調用者也只是從EAX中取得這個值  回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-02-13 13:46 | 梅阿查沒有眼淚
            在C++中真正的臨時對象是看不見的,它們不出現在你的源代碼中。建立一個沒有命名的非堆(non-heap)對象會產生臨時對象。這種未命名的對象通常在2種條件下產生:
            1:為了使函數成功調用而進行隱式類型轉換
            由于對于臨時對象的概念還沒有搞清楚,在些貽笑大方了

            void foo(const int & i)
            {
            cout<<&i<<endl;
            }

            float f=3.14;
            foo(f);//這里應該是正確的打印出這個臨時對象的地址了吧。

            2:函數返回對象時
            int foo()
            {
            return 10+20; //這個是不是編譯器對些做出的一些優化而沒有產生臨時對象呢
            }

            謝謝各位指導  回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-02-13 18:01 | hdqqq1
            讓編譯器生成匯編就可以清楚了.  回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-02-22 02:27 | 挺c++
            1.返回局部對象(你的A(i+r.i))時,編譯器調用A的拷貝構造函數,又復制了一個A,因而得到了你所謂的臨時對象.但是這樣效率比較低.
            2.你的那個函數foo()里面的常數加法10+20實際上是在編譯期執行的.簡單的返回值vc直接寫到eax里面了.就是樓上仁兄說的mov eax,30就搞定.
            3.你的原來那個式子里面,i+j這樣的簡單運算也是在寄存器中完成的. i+j會編譯為:
            mov eax, dword ptr [i]
            add eax, dword ptr [j]
            如果沒有進一步的賦值語句,怎么獲取地址?
            實際上,如果一個語句就僅僅是:i+j;
            那么編譯器優化后根本不為這條語句生成任何代碼.  回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-03-12 00:09 | amazement
            對于取地址符號&在匯編中的實現是這樣的:1,必須將該數壓入到為程序分配的堆棧之中,如 push %eax. 2 然后通過對幀指針%ebp的定位,如leal 8(%ebp),%ebx(lea 為load effective address,8(%ebp)意思是將%ebp+8),那么現在%ebx中存儲的就是該數值的地址了.
              回復  更多評論
              
            # re: [討論]臨時對象有地址么?
            2006-03-12 00:13 | amazement
            對于取地址符號&在匯編中的實現是這樣的:1,必須將該數壓入到為程序分配的堆棧之中,如 push %eax. 2 然后通過對幀指針%ebp的定位,如leal 8(%ebp),%ebx(lea 為load effective address,8(%ebp)意思是將%ebp+8),那么現在%ebx中存儲的就是該數值的地址了.按照程序的情況來看,對于那個 int 的臨時變量沒有壓入堆棧.
              回復  更多評論
              
            # re: [討論]臨時對象有地址么?[未登錄]
            2007-05-31 13:48 | 塌塌方
            cout<<&(i+j)....錯是因為i+j只是一個值沒有分配內存所以不存在地址
            下面也不對了  回復  更多評論
              
            <2006年2月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627281234
            567891011

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            •  

            積分與排名

            • 積分 - 7281
            • 排名 - 1355

            最新評論

            閱讀排行榜

            評論排行榜

            99久久久精品| 久久亚洲精品国产精品| 色综合久久综合网观看| 久久精品国产亚洲AV高清热| 思思久久99热只有频精品66| 日本精品一区二区久久久| 久久精品国产精品亚洲人人 | 一本一道久久综合狠狠老| 日日狠狠久久偷偷色综合0| 久久强奷乱码老熟女| 日批日出水久久亚洲精品tv| 亚洲国产天堂久久久久久 | 蜜桃麻豆WWW久久囤产精品| 青草久久久国产线免观| 少妇被又大又粗又爽毛片久久黑人 | 狠狠色婷婷久久一区二区三区| 久久久久久国产精品免费无码| 麻豆亚洲AV永久无码精品久久| 久久精品欧美日韩精品| 99国产欧美精品久久久蜜芽| 99热成人精品热久久669| 欧美精品一区二区精品久久| 婷婷综合久久狠狠色99h| 精品久久久久久久中文字幕| 久久亚洲av无码精品浪潮| 漂亮人妻被中出中文字幕久久| 色婷婷综合久久久久中文 | 九九久久99综合一区二区| 99久久精品国产高清一区二区 | 久久精品国产精品亜洲毛片| 午夜视频久久久久一区| 一本一本久久A久久综合精品| 久久久久久夜精品精品免费啦| 亚洲国产成人久久综合一| 久久精品国产亚洲7777| 久久久久久久久久久| 久久精品aⅴ无码中文字字幕重口| 国产成人精品久久一区二区三区av | 久久综合九色综合欧美就去吻| 久久精品人人做人人爽电影| 2020久久精品国产免费|