青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

孔雀開發(fā)小屋

專注并致力于手機(jī)客戶端開發(fā)
<2011年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

統(tǒng)計(jì)

  • 隨筆 - 103
  • 文章 - 0
  • 評(píng)論 - 251
  • 引用 - 0

常用鏈接

留言簿(38)

隨筆分類

隨筆檔案

關(guān)注的博客

朋友的博客

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

C++的一個(gè)疑惑
各位請(qǐng)看下面的代碼
 1 struct A {};
 2 
 3 struct B
 4 {
 5 public:
 6     B(){}
 7     B(A& a){}
 8 };
 9 
10 struct B1 : public B
11 {
12 public:
13     B1(const B& b) : B(b)
14     {}
15 };
16 
17 int main()
18 {
19     A a;
20     B1 b1(a);
21 
22     return 0;
23 }

上面的代碼可以編譯通過(guò)(gcc和vs2005下均測(cè)試通過(guò)),但是如果我將第13行的const修飾符去掉,編譯就不能通過(guò),報(bào)錯(cuò)說(shuō)沒(méi)有匹配的函數(shù),請(qǐng)問(wèn)各位高手這是為什么?望指教。

posted on 2010-12-20 21:15 孔雀 閱讀(2624) 評(píng)論(12)  編輯 收藏 引用 所屬分類: C/C++

評(píng)論

# re: C++的一個(gè)疑惑 2010-12-20 22:04 keane

非const的引用參數(shù)只能是相同類型,const的引用參數(shù)可以傳相關(guān)類型的參數(shù)進(jìn)來(lái)

# re: C++的一個(gè)疑惑 2010-12-20 22:22 路人

加上const 才能接受"右值(right value)"引用

# re: C++的一個(gè)疑惑 2010-12-20 22:37 Rollen Holt

受教

# re: C++的一個(gè)疑惑 2010-12-20 22:43 luckycat

B(A& a){} 不但是一個(gè)構(gòu)造函數(shù),而且是一個(gè)自定義的類型轉(zhuǎn)換操作( A -> B),你的問(wèn)題有出在這里,如果要去掉這種非有意的自定義類型轉(zhuǎn)換,使用 explicit B(A& a){}。

一個(gè) 非const引用,只能引用與其類型完全相同的對(duì)象,或者是其派生類的對(duì)象 ,所以 B &refB = objectB ; B &refB = objectB1 都是合法的,但是 B &refB = objectA 就不是合法的
,因?yàn)?A 與 B的類型不相同,且不是B的派生類,所以編譯時(shí)會(huì)報(bào)錯(cuò),于是 " B1( B& b ); A a; B1 b1(a)" 就不能通過(guò),簡(jiǎn)化一下就相當(dāng)于 " B &b = a".

一個(gè) const引用 滿足 非const引用 的特性的同時(shí),還有很重要的一點(diǎn),const 引用可以引用一個(gè)與其類型完全不相同的類型(因?yàn)榫幾g器會(huì)生成一個(gè)轉(zhuǎn)換后可引用的臨時(shí)對(duì)象),
前提是被引用的類型可以轉(zhuǎn)換為引用的類型(編譯器自定義的類型提升,或者是用戶自定義的類型轉(zhuǎn)換,如上面的 B(A& a)。 ),
舉個(gè)例子:
const int &iValue = 3.14; 就是OK的,這里使用編譯器內(nèi)部的類型轉(zhuǎn)換 double -> int.
const B &b = a; 也是OK的,因?yàn)槭褂?B( A &a) 可以將 A -> B ,于是 const B &b = a; 的背后,編譯器所做的就是:

const B tempB( a ); //調(diào)用 B( A &a)
const B &b = tempB;


BTW: 為什么在const引用情況下,編譯器會(huì)生成一個(gè)可被引用的臨時(shí)對(duì)象,原因很簡(jiǎn)單,你是用一個(gè) const引用 來(lái)操作這個(gè)臨時(shí)對(duì)象,所以,這個(gè)臨時(shí)對(duì)象的狀態(tài)是不會(huì)變的,
也就是安全的(當(dāng)然,如果你把const引用 const_cast 成一個(gè)非 const引用來(lái)操作這個(gè)編譯器生成的臨時(shí)對(duì)象,那么結(jié)果是未定義的).

# re: C++的一個(gè)疑惑 2010-12-20 22:48 Rollen Holt

如果樓主想看同類問(wèn)題的話可以去我的博客:http://www.cnblogs.com/rollenholt/articles/1912141.html
希望對(duì)你有幫助

# re: C++的一個(gè)疑惑 2010-12-20 23:06 xyfor1234

B(A& a){}是一個(gè)隱式的類型轉(zhuǎn)換函數(shù),當(dāng)執(zhí)行B1 b1(a)時(shí)會(huì)自動(dòng)調(diào)用這個(gè)函數(shù)將a轉(zhuǎn)換成B類型的臨時(shí)對(duì)象b。這種系統(tǒng)自動(dòng)生成的臨時(shí)對(duì)象都是const的,而const對(duì)象是無(wú)法轉(zhuǎn)換成非const對(duì)象的,所以B1(const B& b) : B(b)這里一定要加const.effective C++里面對(duì)這個(gè)問(wèn)題講得很清楚,自己找來(lái)看看吧。

# re: C++的一個(gè)疑惑 2010-12-21 11:10 kongque

謝謝大家。我明白了。

# re: C++的一個(gè)疑惑 2010-12-21 11:12 kongque

@luckycat
非常感謝這么詳盡的回復(fù),受教了。

# re: C++的一個(gè)疑惑 2010-12-21 11:22 f

關(guān)鍵在于,要進(jìn)行類型轉(zhuǎn)換(將A轉(zhuǎn)為B)生成一個(gè) B類 的臨時(shí)對(duì)像。
C++中對(duì)臨時(shí)對(duì)像只能 const引用,而禁止直接引用(不允許直接修改臨時(shí)對(duì)像)。

# re: C++的一個(gè)疑惑[未登錄](méi) 2010-12-24 14:10 vincent

俺也受教了:)

# re: C++的一個(gè)疑惑 2011-01-26 09:27 loop

臨時(shí)對(duì)象,右值引用。呵呵。。

# re: C++的一個(gè)疑惑 2012-09-21 19:20 雨花石shine

你那個(gè)是一個(gè)拷貝構(gòu)造函數(shù)了吧,如果不用const好像會(huì)有一個(gè)自拷貝出現(xiàn),到時(shí)候析構(gòu)函數(shù)析構(gòu)的時(shí)候會(huì)在同一個(gè)地方析構(gòu)兩次,所有會(huì)報(bào)錯(cuò),用const的用處實(shí)際上很多的時(shí)候是防止自拷貝的出現(xiàn)。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国内揄拍国内精品久久| 欧美福利视频一区| 中文亚洲视频在线| 国产精品日韩久久久久| 9l视频自拍蝌蚪9l视频成人| 亚洲国语精品自产拍在线观看| 久久久一区二区三区| 亚洲国产日韩欧美一区二区三区| 亚洲第一在线综合在线| 欧美日韩一卡二卡| 香蕉成人久久| 久久久久久穴| 一区二区三区精品国产| 午夜精品影院| 亚洲高清不卡一区| 正在播放欧美一区| 国产主播精品在线| 亚洲精品影视| 好吊一区二区三区| 99热免费精品在线观看| 韩国av一区| 日韩视频亚洲视频| 国产亚洲精品aa午夜观看| 亚洲第一级黄色片| 国产精品日韩欧美| 亚洲人www| 国产自产v一区二区三区c| 91久久夜色精品国产九色| 国产精品自拍三区| 亚洲人成网站在线观看播放| 国产亚洲综合性久久久影院| 亚洲精品久久| 亚洲第一区在线观看| 亚洲综合第一页| 一本色道久久综合精品竹菊 | 久久精品国产欧美激情| 母乳一区在线观看| 久久本道综合色狠狠五月| 欧美日本国产视频| 女人天堂亚洲aⅴ在线观看| 国产精品国产三级国产aⅴ入口 | 欧美伦理在线观看| 美女精品在线观看| 日韩一区二区高清| 免费在线成人av| 国产欧美日韩视频一区二区三区| 亚洲福利视频在线| 国产自产精品| 欧美伊人久久大香线蕉综合69| 亚洲视频在线免费观看| 欧美大色视频| 欧美国产日韩免费| 亚洲电影激情视频网站| 久久高清福利视频| 欧美在线国产精品| 国产精品夜夜夜一区二区三区尤| 最新日韩欧美| 日韩视频精品| 欧美激情精品久久久| 欧美大片在线影院| 亚洲激情婷婷| 欧美1区2区3区| 亚洲成人资源| 99视频超级精品| 欧美精品一区二区在线观看| 亚洲人成人一区二区在线观看 | 欧美精品综合| 亚洲免费成人av| 亚洲一区二区久久| 国产精品久久久久久一区二区三区 | 欧美一区二区性| 久久夜色精品国产亚洲aⅴ| 激情久久五月| 女女同性精品视频| 亚洲三级影院| 亚洲你懂的在线视频| 国产精品亚洲网站| 久久精品中文字幕免费mv| 欧美91视频| 一区二区精品国产| 国产精品乱码人人做人人爱| 亚洲综合色自拍一区| 久久全国免费视频| 亚洲三级免费电影| 欧美性大战久久久久久久| 亚洲欧美日韩另类| 女仆av观看一区| 亚洲欧美国产精品专区久久| 国产喷白浆一区二区三区 | 99国产精品视频免费观看一公开| 亚洲一区二区三区精品视频| 国产伦理精品不卡| 久久夜色撩人精品| 一区二区激情| 老司机免费视频久久| 一区二区三区国产在线观看| 国产欧美日韩91| 欧美**人妖| 亚洲制服欧美中文字幕中文字幕| 欧美成人高清视频| 亚洲欧美日韩精品久久久久| 国产一在线精品一区在线观看| 欧美~级网站不卡| 性欧美xxxx大乳国产app| 亚洲国产专区校园欧美| 小嫩嫩精品导航| 亚洲国产另类久久精品| 亚洲欧美国产高清| 18成人免费观看视频| 国产精品久久国产愉拍| 裸体一区二区三区| 午夜精品在线看| 一区二区三区高清在线| 欧美国产一区二区三区激情无套| 午夜视频一区二区| 99热在这里有精品免费| 一区二区在线视频| 国产精品一香蕉国产线看观看| 欧美高清视频www夜色资源网| 香蕉乱码成人久久天堂爱免费 | 一区二区三区波多野结衣在线观看| 老司机aⅴ在线精品导航| 先锋影院在线亚洲| 亚洲一区二区三区激情| 亚洲久久成人| 亚洲国产欧美久久| 一区二区在线观看av| 国产视频一区欧美| 国产精品视频1区| 欧美性事免费在线观看| 欧美美女bb生活片| 欧美另类视频在线| 欧美好吊妞视频| 欧美大片在线观看一区| 欧美大片在线看| 欧美久久久久久| 欧美日韩伦理在线免费| 欧美精品xxxxbbbb| 欧美激情影音先锋| 欧美巨乳在线观看| 欧美日韩1区2区| 欧美日韩在线免费视频| 欧美日韩在线视频一区| 国产精品二区三区四区| 国产精品久久久久久久久动漫 | 性久久久久久| 午夜视频在线观看一区二区| 亚洲一区二区三区影院| 午夜精品一区二区三区在线播放| 午夜精品一区二区在线观看| 久久国产精品久久w女人spa| 久久久久国产一区二区| 免费成人性网站| 欧美激情精品久久久六区热门 | 国产精品日韩一区| 国产视频一区在线观看| 激情成人综合| 国内精品久久久| 亚洲人成网站精品片在线观看| 亚洲三级电影全部在线观看高清| av成人毛片| 性欧美videos另类喷潮| 久久这里有精品15一区二区三区| 蜜桃av噜噜一区二区三区| 91久久精品国产91久久| 亚洲精品国偷自产在线99热| 亚洲淫片在线视频| 久久久久久久久伊人| 欧美国产日韩一区| 国产精品香蕉在线观看| 亚洲第一福利视频| 亚洲一区二区在线免费观看| 久久精品中文| 亚洲人成网站在线播| 欧美在线二区| 欧美日韩国产小视频| 国产视频欧美视频| 99天天综合性| 久久久亚洲国产天美传媒修理工| 欧美激情视频一区二区三区在线播放 | 国产日韩欧美在线播放| 在线观看国产一区二区| 亚洲无限av看| 美女精品在线| 亚洲欧美一区二区三区极速播放 | 国产精品成人国产乱一区| 精品91在线| 欧美亚洲网站| 亚洲免费观看在线视频| 久久久久久久久久久成人| 国产精品久久久久久久久久ktv| 亚洲国产精品嫩草影院| 久久精品国产亚洲一区二区| 亚洲精品久久久久久一区二区| 久久精品99无色码中文字幕| 欧美午夜片欧美片在线观看| 亚洲精品日韩久久| 欧美成人69av| 久热精品在线| 极品少妇一区二区|