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

C++類庫設計的基本思想和方法

 首先說指導思想。這是一個價值觀問題,我們在此提出三條標準:簡單,高性能,可移植。

 我們在開篇就對簡單性目標作了敘述,這里再稍微展開討論一下。我們提出的簡單標準,首先是外部接口簡單,其次是內部結構簡單。我們知道,類庫是提供給上層應用程序使用的,也就是按照一定的接口規范,向上層提供一定的功能服務。接口設計得越簡單,對上層用戶來說就越方便,就越不容易產生Bug。我們可以注意到,流行的成功類庫都是擁有簡單接口的。為了使接口簡單,常常不得不把有關具體實現的復雜性封裝于類庫內部,也就是說,關于簡單性的設計原則,外部接口簡單優先于內部實現簡單。

 

高性能是C++語言優于其它OO語言的一個特性。C++的高性能應該首先歸于它運行模式,和大多數OO語言不同,C++程序編譯后直接產生本地平臺代碼(Native Code),理論上具備了可能的最大執行性能。另外的一個原因是主流的C++編譯器都被設計得非常精巧,具有優越的代碼優化能力。對于C++類庫設計者來說,保持C++的高性能是一個重要目標。程序的高性能可以從兩方面來評價,一是時間性能,以盡量短的時間來解決盡量多的業務;二是資源性能,以盡量少的資源消耗,包括CPU使用、內存占用、網絡流量、磁盤空間等等,來維持正常的程序功能。提高性能的主要手段是數據結構、算法和程序體現結構的優化設計000-861 117-102 。

 

再說可移植性。C++的編譯后輸出代碼是本地平臺代碼,因此C++本身不具有目標代碼可移植性,C++的可移植性只能是源代碼可移植性。源代碼的可移植性是指,同一軟件產品的全部或者部分源代碼可以在不同的編譯環境中進行編譯(不需要編譯的除外),并且其結果具有相同的品質特性(依優先順序包括功能性、可靠性、可用性、性能性、可維護性等)。編譯環境可以大致分為三個層次,最底層的是操作系統,也就是平臺(Platform),其次是對源代碼直接進行處理的編譯器,然后是其它在編譯過程中必需的中間件物品,如庫文件等。我們知道C++雖然在語言規范上獲得了統一(ISO/IEC),其編譯器卻是群雄割據的局面,具有代表性的有Borland C++系列(已經淡出市場),MicrosoftVisual Studio系列的C++編譯器和GNU陣營的壓軸產品gc中的g++。源代碼經編譯環境處理后產生的可執行代碼的執行平臺稱為目標平臺,不同的編譯器的目標平臺也不同,有的支持多平臺,如g++,有的是單一平臺,如Visual C++。對于類庫設計者來說,想要獲得完全的可移植性是非常困難的(除非是象STL這樣被納入語言規范的類庫,因為不支持STL就是不支持標準的C++。即便如此不同的編譯環境還是存在不同的STL實現版本,造成“一個類庫多個實現”的局面),我們只能有選擇地支持一部分環境。我們在開篇就已經說明,我們選擇g++Visual C++編譯器,選擇LinuxWindows 32位目標平臺。

 

接下來我們來討論C++類庫設計的方法論。

 

首先,我們采用僅用頭文件的類庫設計方式(Header-only,STL的大多數實現版本都是采用Header-only的方式),也就是在頭文件(.h)中聲明和定義類,將其成員函數全部定義為內聯函數,而不使用源程序文件(.cpp)。

 

我們知道在C語言的開發環境中,所謂庫文件包含兩個部分,頭文件部分和二進制文件部分。根據二進制文件和用戶目標文件結合方式的不同,又可分為靜態鏈接文件和動態鏈接文件。這種庫的構成模式已成為事實上的C語言開發環境的標準,絕大多數平臺、絕大多數編譯器都使用這種模式 117-301 190-721 。

 

然而C++語言開發環境,這種庫構成模式遭遇到一個重大問題,就是符號命名問題。舉例來說,C++允許多個函數可以被重載(Overload),可以具有相同的名稱,而通過參數列表不同被予以區別。這樣就帶來一個問題,編譯完成的目標代碼中怎樣來區別這些在源代碼中具有相同名稱的函數?常見的做法是在編譯器輸出的函數的符號名稱中加入描述類型信息的字符串,這種方法通常被稱為名稱裝飾(Name decoration)或者名稱糟化(Name mangling,這個術語真不好翻譯,筆者的感覺是發明這個詞的人覺得編譯器把本來簡單干凈的符號給搞亂了)。比如說,g++3.4.4對于函數void func(int),其編譯輸出符號名稱為_Z1funci,對于函數void func(int, int),其輸出符號名稱為_Z1funcii,等等。但是,這種名稱裝飾規則沒有統一規范,也就是說不同的編譯器有各自不同的名稱裝飾規則,這樣就導致不同的C++編譯器只能識別自己的輸出文件,而沒有辦法處理其他編譯器的輸出文件。因此,如果將C++程序制作成二進制的庫文件,則其能夠支持的開發環境只能限于原始的開發環境,基本上不具有多種開發環境間的通用性。

 

一個解決辦法是將庫文件保持在源代碼形態(包括頭文件和源文件),而不編譯成二進制文件。比如STL的許多實現版本都是以頭文件形式存在。這樣雖然解決了名稱裝飾所帶來的不可移植問題,但同時又會帶來代碼編譯時間增長,源代碼完全公開等問題。在C++的名稱裝飾規則未被統一之前,看起來這個問題是很難兩全其美地解決了。

 

在本系列中,我們也仿照g++STL實現方式,完全以頭文件形式來編寫類庫。為什么不把代碼放到源文件中去呢?主要原因是,頭文件只需要用戶使用包含指令(#include)就可以處理了,而源文件則需要配置到用戶工程的編譯目標列表中,和用戶的源程序形成共同編譯的形式,破壞了用戶工程的編譯目標的封閉性,比較麻煩而且不符合軟件開發的一般習慣。

 

其次我們來討論如何支持多平臺。我們已經說過在本系列中我們的線程庫支持Linux平臺的Posix線程和Windows 32位平臺的線程模式。我們可以參考C++Pimpl“慣語”(Pimpl idiom,在Herb Sutter的《Exceptional C++》中有介紹),采用2層類構造方式。上次類亦即接口類,為用戶提供統一的類接口,在用戶看來具有唯一的類行為定義;下層類亦即實現類,將接口類的行為定義轉化為某個平臺的具體實現。

posted on 2008-01-11 15:53 lovetiffany 閱讀(4842) 評論(29)  編輯 收藏 引用

評論

# re: C++類庫設計的基本思想和方法[未登錄] 2008-01-12 17:55 len

這個文章是系列的嗎,使原創還是翻譯的  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2009-10-21 13:51 網絡監控

"頭文件的類庫設計方式"有什么優點?對于一些比較復雜的類豈不是頭文件很大  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2010-06-06 00:35 Clare21Pugh

All people deserve wealthy life and <a href="http://lowest-rate-loans.com">loan</a> or just auto loan can make it much better. Because people's freedom is based on money state.   回復  更多評論   

# re: C++類庫設計的基本思想和方法 2011-08-07 09:02 blog posting service

Some time before I was wanting to know about optimization. At this moment I realize that blog posting supposes to be extra important for my website. Thence, I decided to use the blog posting service.   回復  更多評論   

# re: C++類庫設計的基本思想和方法 2011-11-23 01:56 Web Design

比較麻煩而且不符合軟件開發的一般習慣。  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2011-12-17 01:09 best joomla hosting

也就是說,關于簡單性的設計原則,外部接口簡單優先于內部實現簡單。<a href="http://www.joomlahostings.org/">best joomla hosting</a>  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2011-12-20 15:02 Latest news

類庫多個實現”的局面),我們只能有選擇地支持一部分環境。我們在開篇就已經說明,我們選擇g++和Visual C++編譯器,選擇Linux和Windows 32位目標平臺。  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2011-12-22 17:42 free casino games

集成到MSDN的Wiki是一個極好的主意。這實在是太像MS公司做到這一點的風險,但我認為,從長遠來看將支付。好樣的!  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2011-12-23 21:47 Online dating

最底層的是操作系統,也就是平臺(Platform),其次是對源代碼直接進行處理的編譯器,  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2011-12-24 01:23 tinnitus treatment

C + +中繼續使用,是首選的編程語言之一,以開發專業應用  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-01-02 15:31 milk

常困難的(除非是象STL這樣被納入語言規范的類庫,因為不支持STL就是不支持標準的C++。即便如此不同的編譯環境還是存在不同的STL實現版本,造成“一個類庫多個實現”的局面),我  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-01-24 00:08 colon cleanse reviews

作為增強到C語言開始  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-01-24 00:11 gout cure

C + +中有時也被稱為混合語言.  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-01-24 00:14 hemorrhoid relief

C + +中繼續使用,是首選的編程語言之一,以開發專業應用  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-01-28 02:15 buy wartrol

你真的已經搭上了眾多關注的目光似乎  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-03-17 02:56 vps hosting

的C ++繼續使用和開發專業應用首選的編程語言之一。  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-03-23 02:01 hostgator coupon

前身的Visual C++被稱為微軟的C / c ++  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-08-09 20:07 History of crap

我們只能有選擇地支持一部分環境。我們在開篇就已經說明,我們選擇g++和Visual C++編譯器  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-08-14 22:25 Search Engine Optimization

,也就是說,關于簡單性的設計原則,外部接口簡單優先于內部實現簡單。  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-09-21 17:11 mobile me

我們只能有選擇地支持一部分環境。我們在開篇就已經說明,我們選擇g++和Visual C++編譯器   回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-09-28 22:01 payday loans

、網絡流量、磁盤空間等等,來維持正常的程序功能。提高性能的主要手段是數據結構、算法和程序體現結構的優化設計  回復  更多評論   

# re: C++類庫設計的基本思想和方法 2012-10-02 15:54 SEO Agency

我們只能有選擇地支持一部分環境。我們在開篇就已經說明,我們選擇g++和Visual C++編譯器  回復  更多評論   

<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

導航

統計

常用鏈接

留言簿(4)

隨筆檔案

網站收藏

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            老司机精品视频一区二区三区| 欧美成人一区二区| 亚洲女ⅴideoshd黑人| 亚洲欧美三级伦理| 欧美a级片网站| 欧美成人午夜77777| 黄色免费成人| 亚洲成人中文| 欧美日韩在线高清| 午夜国产精品影院在线观看 | 午夜精品久久久久久| 午夜精品久久久久久久99樱桃| 狠狠色狠色综合曰曰| 99伊人成综合| 欧美成人精品h版在线观看| 一本色道88久久加勒比精品 | 99国产精品久久| 亚洲欧美日韩在线| 欧美日韩视频一区二区| 欧美在线观看视频在线| 免费观看久久久4p| 欧美一区高清| 欧美丰满高潮xxxx喷水动漫| 国外视频精品毛片| 欧美亚洲免费| 欧美成人一区在线| 久久久久久久999精品视频| 欧美激情亚洲一区| 91久久国产综合久久91精品网站| 久久精品综合一区| 欧美亚洲在线| 亚洲午夜一区二区三区| 亚洲精品在线观看免费| 国内精品美女av在线播放| 日韩一区二区电影网| 狠狠色噜噜狠狠色综合久| 一区二区三区欧美在线| 亚洲日本免费| 久久视频一区二区| 久久久成人网| 国产精品一二一区| 亚洲免费激情| 亚洲精品一区在线观看香蕉| 久久精品在线视频| 亚洲第一页在线| 欧美国产精品久久| 韩国成人福利片在线播放| 亚洲私人黄色宅男| 国产欧美日韩专区发布| 日韩午夜激情电影| 一区二区三区免费网站| 欧美xx69| 亚洲一级黄色av| 午夜精品福利电影| 狠狠色丁香婷婷综合久久片| 久久嫩草精品久久久精品一| 国产农村妇女精品一二区| 一区二区三区国产精华| 亚洲一区二区不卡免费| 亚洲欧美在线磁力| 欧美一级片一区| 国产精品影视天天线| 亚洲一区二区三区777| 亚洲女女做受ⅹxx高潮| 国产精品成人在线观看| 激情久久久久久久| 欧美二区不卡| 欧美日韩xxxxx| 欧美亚洲视频在线看网址| 久久精品主播| 99精品视频一区| 欧美精品一二三| 日韩一二三在线视频播| 午夜精品亚洲一区二区三区嫩草| 国产精品一区免费视频| 欧美国产日产韩国视频| 亚洲欧洲偷拍精品| 午夜精品久久久久久久久久久久久 | 久久精品免费播放| 狠色狠色综合久久| 欧美不卡三区| 欧美在线www| 欧美va亚洲va香蕉在线| 亚洲人www| 极品少妇一区二区三区| 亚洲欧洲精品天堂一级| 国产欧美日韩免费| 亚洲欧洲综合| 午夜精品福利一区二区三区av | 在线日韩av片| 欧美日韩中文字幕精品| 久久中文久久字幕| 亚洲麻豆视频| 国产农村妇女毛片精品久久莱园子| 亚洲国产精品精华液2区45| 亚洲视屏在线播放| 黄色国产精品| 国产精品久久久久久影院8一贰佰| 欧美在线免费播放| 亚洲精品免费网站| 麻豆亚洲精品| 午夜伦欧美伦电影理论片| 永久555www成人免费| 欧美午夜视频在线| 99视频在线观看一区三区| 久久精品国产亚洲一区二区三区 | 亚洲视频一区二区免费在线观看| 久久亚洲欧美| 六月天综合网| 午夜精品久久久久久久99樱桃| 尤物精品在线| 国产日韩亚洲| 久久精品色图| 巨乳诱惑日韩免费av| 黑人极品videos精品欧美裸| 亚洲欧美日韩国产精品| 91久久久久久久久| 99re在线精品| 欧美日韩国产精品成人| 亚洲国产综合91精品麻豆| 久久精品午夜| 亚洲电影免费观看高清完整版在线观看 | 久久蜜桃精品| 国产一区日韩一区| 亚洲砖区区免费| 欧美亚洲系列| 99精品热6080yy久久 | 欧美午夜精品一区二区三区| 99riav国产精品| 欧美国产一区在线| 米奇777在线欧美播放| 久久久久高清| 久久精品日韩欧美| 欧美一区二区三区四区夜夜大片| 亚洲一区二区精品| 国产亚洲一区二区三区| 国产精品成人免费视频| 欧美日韩国产美女| 欧美日本一区二区三区| 欧美精品久久99| 欧美激情视频网站| 欧美日韩精品免费观看视频完整| 欧美韩国日本一区| 亚洲欧美日本伦理| 美女在线一区二区| 久久琪琪电影院| 美女视频黄免费的久久| 中文国产一区| 亚洲天堂免费观看| 性欧美18~19sex高清播放| 午夜精品国产更新| 久久久精彩视频| 麻豆国产精品va在线观看不卡| 日韩视频一区二区在线观看 | 精品91在线| 国产精品第一页第二页第三页| 午夜在线一区二区| 性视频1819p久久| 久久久久久久尹人综合网亚洲| 亚洲欧洲日韩在线| 亚洲看片免费| 亚洲欧美日韩国产中文在线| 欧美一区二区三区四区高清| 亚洲剧情一区二区| 免播放器亚洲一区| 亚洲激情在线播放| 欧美a级一区二区| 欧美激情亚洲一区| 久久一本综合频道| 亚洲高清不卡在线| 久久一区视频| 亚洲欧美日韩天堂| 亚洲精品免费在线播放| 国产亚洲欧美另类中文| 欧美视频不卡中文| 欧美高清成人| 久热精品视频在线观看| 欧美日韩免费一区二区三区| 免费成人在线视频网站| 欧美一区二区三区男人的天堂| 麻豆成人在线观看| 国产精品乱码人人做人人爱| 欧美激情精品久久久久久| 国产精品私房写真福利视频| 亚洲大胆视频| 亚洲国产成人porn| 激情久久综艺| 亚洲综合999| 午夜一区二区三区在线观看| 久热精品在线视频| 亚洲欧美高清| 欧美视频在线观看| 久久国产精品第一页| 久久综合九色99| 在线亚洲欧美专区二区| 免费欧美日韩| 揄拍成人国产精品视频| 亚洲欧美日韩一区在线| 亚洲人成人99网站| 欧美jizz19hd性欧美|