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

chenglong7997

關(guān)于默認(rèn)構(gòu)造函數(shù)的幾個(gè)錯(cuò)誤認(rèn)識(shí)(四種情況下,編譯器會(huì)生成默認(rèn)構(gòu)造函數(shù))

 假期間閑來(lái)無(wú)事,就下載了某大師的VC++視頻資料。在講到C++時(shí),說(shuō)是如果程序員沒(méi)有自己定義默認(rèn)構(gòu)造函數(shù),那么編譯器會(huì)自動(dòng)為我們產(chǎn)生一個(gè)默認(rèn)的構(gòu)造函數(shù)。 本來(lái)這個(gè)錯(cuò)誤的認(rèn)識(shí)很多程序員都有,不足為奇。但有這么多年編程經(jīng)驗(yàn)的高手也有這樣的錯(cuò)誤認(rèn)識(shí)就不禁讓我啞然了。
        其實(shí)編程語(yǔ)言和我們所用的任何軟件沒(méi)有區(qū)別,例如Photoshop、AutoCAD之類。其唯一不同的是我們用的編程語(yǔ)言是基于編譯器的,而應(yīng)用軟件是基于我們的編程語(yǔ)言的。
        既然我們所用的軟件是基于編譯器的,那么理解編譯器在背后到底為我們做了些什么、在什么情況下做了哪些事情就顯得異常重要。這就像Photoshop會(huì)為你產(chǎn)生一些基本圖形例如矩形、三角形之類,而不會(huì)憑空產(chǎn)生一些風(fēng)景優(yōu)美的圖片一樣。
        在《C++ Annotated Reference Manual(ARM)[ELLIS90]》中的Section 12.1告訴我們:"Default constructors...在需要的時(shí)候被編譯器產(chǎn)生出來(lái)"。
        其實(shí)默認(rèn)構(gòu)造函數(shù)也是分為兩類的:有用的、無(wú)用的。
        所謂有用的標(biāo)準(zhǔn)也是就默認(rèn)構(gòu)造函數(shù)會(huì)為我們的類做一些初始化操作。那么無(wú)用的就不會(huì)做任何工作,從而對(duì)我們的類也就沒(méi)有任何意義。所以,我們通常所說(shuō)的默認(rèn)構(gòu)造函數(shù)是指有用的默認(rèn)構(gòu)造函數(shù),其英文名字叫nontrivial default constructor。
        那么到底什么時(shí)候編譯器會(huì)為我們產(chǎn)生nontrivial default constructor呢?有下面四中情況:
       ①如果一個(gè)類里面某個(gè)成員對(duì)象有nontrivial default constructor,編譯器就會(huì)為我們的類產(chǎn)生nontrivial default constructor。
       那么編譯器這樣做的理由是什么?
       答案是因?yàn)轭惓蓡T對(duì)象有nontrivial default constructor,那么編譯器就需要顯式的來(lái)調(diào)用這個(gè)類成員對(duì)象的nontrivial default constructor。而編譯器想顯式的調(diào)用類成員對(duì)象的nontrivial default constructor,就需要自己來(lái)合成一些代碼來(lái)調(diào)用。但是記住,編譯器合成的nontrivial default constructor僅僅調(diào)用類成員對(duì)象的默認(rèn)構(gòu)造函數(shù),而不對(duì)我們類里面的其它變量做任何初始化操作。
        也就是說(shuō),如果你想初始化類成員變量以外的變量例如一個(gè)int、一個(gè)String,那么必須自己定義默認(rèn)構(gòu)造函數(shù)來(lái)完成這些變量的初始化。而編譯器會(huì)對(duì)你定義的默認(rèn)構(gòu)造函數(shù)做相應(yīng)的擴(kuò)展,從而調(diào)用類成員對(duì)象的nontrivial default constructor。
        ②如果一個(gè)派生類的基類有nontrivial default constructor,那么編譯器會(huì)為派生類合成一個(gè)nontrivial default constructor。
        編譯器這樣的理由是:因?yàn)榕缮惐缓铣蓵r(shí)需要顯式調(diào)用基類的默認(rèn)構(gòu)造函數(shù)。
        ③如何一個(gè)類里面隱式的含有任何virtual function table(或vtbl)、pointer member(或vptr)。
        編譯器這樣做的理由很簡(jiǎn)單:因?yàn)檫@些vtbl或vptr需要編譯器隱式(implicit)的合成出來(lái),那么編譯器就把合成動(dòng)作放到了默認(rèn)構(gòu)造函數(shù)里面。所以編譯器必須自己產(chǎn)生一個(gè)默認(rèn)構(gòu)造函數(shù)來(lái)完成這些操作。
        所以如果你的類里帶有任何virtual function,那么編譯器會(huì)為你合成一個(gè)默認(rèn)構(gòu)造函數(shù)。
        ④如果一個(gè)類虛繼承于其它類。
        編譯器這樣做的理由和③類似:因?yàn)樘摾^承需要維護(hù)一個(gè)類似指針一樣,可以動(dòng)態(tài)的決定內(nèi)存地址的東西(不同編譯器對(duì)虛繼承的實(shí)現(xiàn)不僅相同)。
        那么除了以上四種情況,編譯器并不會(huì)為我們的類產(chǎn)生默認(rèn)構(gòu)造函數(shù)。
        所以編程中切忌想當(dāng)然,要明白哪些事情是編譯器做的,哪些事情需要程序員來(lái)完成的。就像堆所占用的資源需要程序員自己來(lái)釋放,而棧空間是編譯器管理的一樣。
        只有如此,才能編寫(xiě)出質(zhì)量更高的代碼。

posted on 2012-04-01 06:19 Snape 閱讀(1150) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++ 轉(zhuǎn)載

導(dǎo)航

<2012年3月>
26272829123
45678910
11121314151617
18192021222324
25262728293031
1234567

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章分類

文章檔案

my

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            看片网站欧美日韩| 日韩小视频在线观看| 牛牛国产精品| 欧美精品激情| 亚洲一区影院| 午夜伦欧美伦电影理论片| 亚洲一区观看| 欧美一区二区视频在线观看2020| 欧美一区二区日韩| 久久久久久自在自线| 久久婷婷影院| 欧美女激情福利| 国产精品亚洲视频| 国产在线精品成人一区二区三区| 国内精品久久久久影院优| 一区二区三区在线观看国产| 亚洲人www| 亚洲男人的天堂在线aⅴ视频| 欧美专区在线观看| 欧美岛国激情| 一本色道久久综合一区| 欧美专区一区二区三区| 欧美精品在线网站| 国产在线精品成人一区二区三区 | 欧美一级大片在线免费观看| 久久精品视频免费| 欧美成人综合网站| 亚洲影院色无极综合| 久久综合影音| 国产精品视频yy9099| 亚洲国产综合视频在线观看| 亚洲性线免费观看视频成熟| 久久久久久伊人| 91久久久一线二线三线品牌| 亚洲欧美www| 久久频这里精品99香蕉| 国产精品美女黄网| 亚洲精品综合| 亚洲欧美日韩精品综合在线观看| 欧美 日韩 国产精品免费观看| 99视频一区二区| 久久青青草综合| 亚洲人成小说网站色在线| 欧美在线观看天堂一区二区三区| 欧美日韩的一区二区| 亚洲高清在线| 久久先锋影音| 亚洲欧美国产精品va在线观看| 欧美人与禽猛交乱配| 亚洲高清一二三区| 蜜桃av一区二区| 性欧美xxxx大乳国产app| 欧美精品福利| 亚洲福利视频一区| 美女日韩在线中文字幕| 久久大综合网| 亚洲性夜色噜噜噜7777| 亚洲人成网站色ww在线| 美女视频一区免费观看| 激情伊人五月天久久综合| 先锋影音网一区二区| 一本色道久久99精品综合| 欧美日韩国产小视频| 日韩午夜高潮| 日韩西西人体444www| 欧美日韩国产大片| 一区二区精品在线观看| 亚洲人午夜精品免费| 欧美激情一区二区三区在线| 99国产精品视频免费观看| 亚洲国产精品久久久久秋霞影院 | 欧美福利视频在线观看| 91久久久久久| 亚洲国产成人精品女人久久久| 久久久久综合| 最新高清无码专区| 91久久在线播放| 欧美日韩国产一区精品一区| 亚洲一区日韩| 亚洲欧美在线磁力| 国产一区二区三区丝袜| 久久久久久亚洲精品中文字幕| 久久精品三级| 亚洲三级观看| 亚洲天堂av高清| 国产一区日韩一区| 亚洲电影观看| 国产精品性做久久久久久| 久久精品一二三| 美女黄毛**国产精品啪啪 | 久久夜色精品国产亚洲aⅴ| 欧美成人午夜剧场免费观看| 亚洲综合色激情五月| 久久精品一区蜜桃臀影院 | 久久福利一区| 亚洲美女诱惑| 小处雏高清一区二区三区 | 99伊人成综合| 亚洲欧美日韩中文播放| 伊人成人网在线看| 日韩视频三区| 极品中文字幕一区| 99精品欧美一区| 亚洲成人在线免费| 亚洲欧美日韩国产中文| 一本色道久久综合| 久久婷婷国产综合尤物精品| 亚洲欧美久久久久一区二区三区| 久久久久久久综合日本| 一区二区三区视频免费在线观看| 欧美在线播放| 久久在线观看视频| 亚洲免费视频网站| 亚洲专区在线视频| 最近中文字幕日韩精品| 亚洲欧美中文字幕| 亚洲桃花岛网站| 美女精品国产| 久久乐国产精品| 国产精品乱看| 亚洲精品一级| 亚洲精品免费在线观看| 久久免费视频观看| 欧美在线视频免费观看| 国产精品v欧美精品∨日韩| 欧美不卡三区| 尤物在线观看一区| 欧美在线国产| 久久成人一区| 国产午夜精品久久久久久久| 亚洲社区在线观看| 亚洲香蕉视频| 欧美三区在线观看| 亚洲最黄网站| 一区二区三区 在线观看视| 欧美大片专区| 亚洲欧洲免费视频| 日韩视频―中文字幕| 欧美激情成人在线视频| 亚洲激情av在线| 日韩午夜在线| 欧美精品久久一区二区| 亚洲日本在线观看| 一区二区黄色| 欧美午夜精品久久久| 亚洲图片在线观看| 欧美在线免费一级片| 国产日韩欧美一区二区三区在线观看 | 亚洲精品资源| 欧美日韩成人在线视频| 99精品国产一区二区青青牛奶| 一本色道久久99精品综合 | 欧美freesex8一10精品| 亚洲第一久久影院| 欧美极品在线观看| 一区二区三区国产在线观看| 亚洲一区二区免费在线| 国产精品自拍三区| 久久精彩免费视频| 亚洲第一页在线| 亚洲一区二区三区四区视频| 国产精品日韩欧美一区二区| 久久国产精品第一页| 欧美高清视频一区二区三区在线观看| 亚洲高清在线播放| 欧美深夜影院| 久久精品99| 91久久久亚洲精品| 久久国产天堂福利天堂| 91久久精品国产91性色| 国产精品麻豆成人av电影艾秋| 久久爱另类一区二区小说| 欧美激情一区二区三区在线| 亚洲国产成人高清精品| 亚洲黄色免费电影| 欧美日韩亚洲国产一区| 欧美在线观看视频| 亚洲欧洲免费视频| 久久大香伊蕉在人线观看热2| 一区二区在线视频观看| 欧美日韩福利视频| 久久精品官网| 一区二区三区偷拍| 模特精品裸拍一区| 亚洲男人第一网站| 亚洲国产精品久久久久| 国产精品影片在线观看| 男人的天堂亚洲在线| 校园春色综合网| 99热免费精品| 亚洲国产成人精品久久久国产成人一区| 亚洲欧美一区二区在线观看| 91久久精品一区二区别| 国产亚洲毛片在线| 欧美视频日韩视频| 欧美成人激情视频免费观看| 欧美在线视频免费播放| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲全部视频| 亚洲第一综合天堂另类专|