99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

關于默認構造函數的幾個錯誤認識

孫東風:聯網游戲、應用開發方面有獨特的優勢!

假期間閑來無事,就下載了某大師的VC++視頻資料。在講到C++時,說是如果程序員沒有自己定義默認構造函數,那么編譯器會自動為我們產生一個默認的構造函數。 本來這個錯誤的認識很多程序員都有,不足為奇。但有這么多年編程經驗的高手也有這樣的錯誤認識就不禁讓我啞然了。

其實編程語言和我們所用的任何軟件沒有區別,例如Photoshop、AutoCAD之類。其唯一不同的是我們用的編程語言是基于編譯器的,而應用軟件是基于我們的編程語言的。

既然我們所用的軟件是基于編譯器的,那么理解編譯器在背后到底為我們做了些什么、在什么情況下做了哪些事情就顯得異常重要。這就像Photoshop會為你產生一些基本圖形例如矩形、三角形之類,而不會憑空產生一些風景優美的圖片一樣。

在《C++ Annotated Reference Manual(ARM)[ELLIS90]》中的Section 12.1告訴我們:"Default constructors...在需要的時候被編譯器產生出來"。

其實默認構造函數也是分為兩類的:有用的、無用的。

所謂有用的標準也是就默認構造函數會為我們的類做一些初始化操作。那么無用的就不會做任何工作,從而對我們的類也就沒有任何意義。所以,我們通常所說的默認構造函數是指有用的默認構造函數,其英文名字叫nontrivial default constructor。

那么到底什么時候編譯器會為我們產生nontrivial default constructor呢?有下面四中情況:

①如果一個類里面某個成員對象有nontrivial default constructor,編譯器就會為我們的類產生nontrivial default constructor。

那么編譯器這樣做的理由是什么?

答案是因為類成員對象有nontrivial default constructor,那么編譯器就需要顯式的來調用這個類成員對象的nontrivial default constructor。而編譯器想顯式的調用類成員對象的nontrivial default constructor,就需要自己來合成一些代碼來調用。但是記住,編譯器合成的nontrivial default constructor僅僅調用類成員對象的默認構造函數,而不對我們類里面的其它變量做任何初始化操作。

也就是說,如果你想初始化類成員變量以外的變量例如一個int、一個String,那么必須自己定義默認構造函數來完成這些變量的初始化。而編譯器會對你定義的默認構造函數做相應的擴展,從而調用類成員對象的nontrivial default constructor。

②如果一個派生類的基類有nontrivial default constructor,那么編譯器會為派生類合成一個nontrivial default constructor。

編譯器這樣的理由是:因為派生類被合成時需要顯式調用基類的默認構造函數。

③如何一個類里面隱式的含有任何virtual function table(或vtbl)、pointer member(或vptr)。

編譯器這樣做的理由很簡單:因為這些vtbl或vptr需要編譯器隱式(implicit)的合成出來,那么編譯器就把合成動作放到了默認構造函數里面。所以編譯器必須自己產生一個默認構造函數來完成這些操作。

所以如果你的類里帶有任何virtual function,那么編譯器會為你合成一個默認構造函數。

④如果一個類虛繼承于其它類。

編譯器這樣做的理由和③類似:因為虛繼承需要維護一個類似指針一樣,可以動態的決定內存地址的東西(不同編譯器對虛繼承的實現不僅相同)。

那么除了以上四種情況,編譯器并不會為我們的類產生默認構造函數。

所以編程中切忌想當然,要明白哪些事情是編譯器做的,哪些事情需要程序員來完成的。就像堆所占用的資源需要程序員自己來釋放,而棧空間是編譯器管理的一樣。

只有如此,才能編寫出質量更高的代碼。

全部回復(0)
正序查看
倒序查看
現在還沒有回復呢,說說你的想法
主站蜘蛛池模板: 97精品久久中文 | 欧美自拍区 | 97久久精品 | 玩丰满高大邻居人妻无码 | 综合国产视频 | 中文字幕日本 | 欧美肥臀大屁股MAGNET | 99国精视频一区一区一三 | 国产精品黑色丝袜高跟鞋 | 一区二区三区四区视频免费观看 | 91精品在线视频观看 | 国产懂色av| 麻豆网站在线播放 | 国产毛片毛片毛片毛片毛片 | 亚洲日日摸夜夜夜夜夜爽小说 | 扒开双腿猛进入在线观看 | 色哟哟网站入口在线观看 | H无码精品动漫在线观看导航 | 久久婷婷成人综合色综合 | 中文字幕日韩高清2024 | 少妇翘臀亚洲精品av图片 | 久久久日韩精品一区二区 | 国产各种高潮合集在线观看 | 最近中文AV字幕在线中文 | 在线观看黄色片 | 色视频在线观看免费视频 | 在线看免费av | 午夜男女爽爽影院网站 | 老鸭窝一区 | 国产三级免费观看 | 黑人狂躁日本妞一区二区三区 | 国产粉嫩美女无套被中出 | 在线亚洲无砖砖区免费 | 麻豆www传媒入口 | 亚洲综合成人婷婷五月在线观看 | 扒开粉嫩的小缝隙喷白浆 | 一区国产精品 | 亚洲情XO亚洲色XO无码 | 国产精品青青青高清在线 | 麻豆国产一区二区三区 | 中国一级黄色片子 |