• <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í)值可以修改而他們?cè)诤瘮?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)論
              


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


            2021精品国产综合久久| 精品久久久久久久久午夜福利| 久久久久久a亚洲欧洲aⅴ| 久久久久久久尹人综合网亚洲| 93精91精品国产综合久久香蕉| 青青青青久久精品国产h| 久久婷婷五月综合色99啪ak| 久久亚洲精品无码AV红樱桃| 曰曰摸天天摸人人看久久久| 国产亚洲精久久久久久无码77777| 色偷偷久久一区二区三区| 国产成人久久777777| 亚洲精品国产字幕久久不卡| 四虎国产精品免费久久5151| 久久久久亚洲精品日久生情| 精品久久久久久无码专区不卡| 久久久久亚洲精品无码网址 | 女人香蕉久久**毛片精品| 看全色黄大色大片免费久久久| 久久棈精品久久久久久噜噜| 精品久久久无码中文字幕| 2021久久国自产拍精品| 国产精品久久久久免费a∨| 亚洲国产精品久久久久网站| 久久久无码人妻精品无码| 中文字幕无码久久精品青草| 99久久精品免费看国产| 大伊人青草狠狠久久| 午夜欧美精品久久久久久久| 无码国内精品久久综合88| 老司机午夜网站国内精品久久久久久久久| 国产精品久久久久aaaa| 天天爽天天狠久久久综合麻豆| 伊人久久久AV老熟妇色| 国产亚洲精品久久久久秋霞 | 久久久综合九色合综国产| 久久婷婷五月综合97色| 午夜天堂精品久久久久| 亚洲狠狠婷婷综合久久久久| 中文字幕日本人妻久久久免费 | 亚洲狠狠婷婷综合久久久久|