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


            伊人久久综在合线亚洲2019| 欧美日韩精品久久久久| 国产精品久久久久久吹潮| 久久综合国产乱子伦精品免费| 99久久超碰中文字幕伊人| 精品999久久久久久中文字幕| 久久精品综合一区二区三区| 亚洲国产天堂久久综合| 久久综合噜噜激激的五月天| 久久国产精品二国产精品| 亚洲AV日韩AV永久无码久久| 国产午夜精品久久久久九九| 熟妇人妻久久中文字幕| 久久精品国产精品亚洲人人| 久久精品国产亚洲AV电影| 狠狠综合久久综合中文88| 久久久久亚洲Av无码专| 久久天天躁狠狠躁夜夜avapp | 久久精品夜色噜噜亚洲A∨| 久久这里都是精品| 国产女人aaa级久久久级| 精品综合久久久久久97超人 | 国产成人无码精品久久久性色| 久久这里只有精品久久| 久久精品蜜芽亚洲国产AV| 97香蕉久久夜色精品国产 | 国产精品成人99久久久久91gav| 久久亚洲AV成人无码| 久久久久久国产a免费观看黄色大片 | 久久精品国产亚洲AV蜜臀色欲| 精品久久久久一区二区三区| 久久综合中文字幕| 国产精品女同久久久久电影院| 久久久久无码精品国产| 久久99国产综合精品| 91久久精一区二区三区大全| 无码国内精品久久人妻| 久久综合给合久久狠狠狠97色69| 精品熟女少妇a∨免费久久| 久久99精品国产自在现线小黄鸭| 久久精品国产99久久无毒不卡|