• <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>

            MySpace

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              18 隨筆 :: 2 文章 :: 10 評(píng)論 :: 0 Trackbacks

            在一個(gè)函數(shù)中有個(gè)參數(shù)是 CONST 類型,例如: string & max(string s1,string s2) ,那么我調(diào)用的時(shí)候有可能會(huì)這樣寫:max("abc","edf"); 然后編譯,出錯(cuò)。提示為 無法將 CONST 類型轉(zhuǎn)換為 非CONST 類型。那是因?yàn)榫幾g器在接收到"abc"的時(shí)候會(huì)生成一個(gè)臨時(shí)變量,然后將這個(gè)臨時(shí)變量傳入到 max  函數(shù)中。但是這個(gè)臨時(shí)變量是 CONST 類型的,與該函數(shù)的定義不一致,所以會(huì)在編譯時(shí)拋出類型不一致的錯(cuò)誤。

            因?yàn)檫@樣做可以防止傳遞到函數(shù)內(nèi)的臨時(shí)值被修改。否則,程序員就會(huì)很奇怪地發(fā)現(xiàn),只有編譯器產(chǎn)生的臨時(shí)值可以修改而他們在函數(shù)調(diào)用時(shí)實(shí)際傳進(jìn)去的參數(shù)卻不行。(關(guān)于這一點(diǎn)是有事實(shí)根據(jù)的,早期版本的c++允許這類的臨時(shí)值可以被產(chǎn)生,傳遞,修改,結(jié)果很多程序員感到很奇怪)

             const string& max(const string& s1,const string& s2)
             {
              return s1;
             };


            然后調(diào)用

            const string &s = max("abc", "edf");


            在 VS2005 下編譯不通過,錯(cuò)誤提示為 :

             error C2440: “return”: 無法從“const char *”轉(zhuǎn)換為“const char (&)[4]”

            但是在 LINUX 下用 KDEVELOP 編譯卻沒有問題。我想可能是編譯器在自動(dòng)創(chuàng)建臨時(shí)變量的時(shí)候的類型轉(zhuǎn)換是不一樣,當(dāng)該函數(shù)在接受字符串參數(shù)的時(shí)候 KDEVELOP  能夠?qū)⒆址D(zhuǎn)換成 CONST 的STRING 引用類型,但是 VS 卻將其轉(zhuǎn)換成了 const char * 。不知這樣推斷是否正確,可能還要再查下 MSDN 可能能夠得出其中的一部分的答案,呵呵。

            posted on 2008-06-04 11:57 yang-chunlei 閱讀(331) 評(píng)論(2)  編輯 收藏 引用

            評(píng)論

            # re: 編譯器產(chǎn)生的臨時(shí)值 2008-06-04 16:23 raof01
            你傳遞的是引用,上哪生成臨時(shí)對(duì)象去?所以不是臨時(shí)變量的問題,而是類型檢查的事。如果提供了隱式轉(zhuǎn)換,你的代碼就沒有問題,所以KDEVELOP不會(huì)抱怨。  回復(fù)  更多評(píng)論
              

            # re: 編譯器產(chǎn)生的臨時(shí)值 2008-06-05 08:45 春雷
            @raof01
            雖然傳遞的是引用,但是對(duì)于傳進(jìn)函數(shù)里的參數(shù)參數(shù)不是正確的類型——它是一個(gè)字符數(shù)組,編譯器還是會(huì)生成一個(gè)臨時(shí)的string對(duì)象,然后再將該對(duì)象傳進(jìn)這個(gè)函數(shù)。
            大致的代碼可能是:
            const string temp1("abc");
            const string temp2("abc");
            max(temp1,temp2);


            還有你后面說的“隱式轉(zhuǎn)換”在VS下該怎么樣提供?
              回復(fù)  更多評(píng)論
              


            只有注冊用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久婷婷五月综合国产尤物app| 亚洲精品午夜国产VA久久成人| 精品视频久久久久| 久久久久亚洲AV无码专区网站| 久久亚洲精品无码VA大香大香| 色综合久久中文综合网| 热99RE久久精品这里都是精品免费| 精品久久久久久无码专区| 香蕉aa三级久久毛片| 99久久人妻无码精品系列蜜桃| 久久青青草视频| 久久久久99精品成人片三人毛片 | 国产成人香蕉久久久久| 久久亚洲sm情趣捆绑调教| 国产精品VIDEOSSEX久久发布| 亚洲国产美女精品久久久久∴ | 91精品国产高清久久久久久91| 亚洲欧美成人综合久久久| 色欲综合久久躁天天躁| 中文字幕亚洲综合久久2| 国产午夜免费高清久久影院| 久久亚洲国产精品成人AV秋霞| 久久有码中文字幕| 久久综合伊人77777麻豆| 国产精品欧美亚洲韩国日本久久| 久久精品草草草| 爱做久久久久久| 国产精品内射久久久久欢欢| 国产精品欧美久久久久天天影视| 91精品国产91久久| 久久激情亚洲精品无码?V| 精品久久久久久国产三级| 99热热久久这里只有精品68| 99久久www免费人成精品| 国产一区二区精品久久岳| 久久激情亚洲精品无码?V| 人人狠狠综合久久亚洲| 国产精品久久久久久五月尺| 无码AV波多野结衣久久| 久久精品国产亚洲av水果派| 久久国产高清字幕中文|