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

C++類庫設(shè)計的基本思想和方法

 首先說指導(dǎo)思想。這是一個價值觀問題,我們在此提出三條標(biāo)準(zhǔn):簡單,高性能,可移植。

 我們在開篇就對簡單性目標(biāo)作了敘述,這里再稍微展開討論一下。我們提出的簡單標(biāo)準(zhǔn),首先是外部接口簡單,其次是內(nèi)部結(jié)構(gòu)簡單。我們知道,類庫是提供給上層應(yīng)用程序使用的,也就是按照一定的接口規(guī)范,向上層提供一定的功能服務(wù)。接口設(shè)計得越簡單,對上層用戶來說就越方便,就越不容易產(chǎn)生Bug。我們可以注意到,流行的成功類庫都是擁有簡單接口的。為了使接口簡單,常常不得不把有關(guān)具體實現(xiàn)的復(fù)雜性封裝于類庫內(nèi)部,也就是說,關(guān)于簡單性的設(shè)計原則,外部接口簡單優(yōu)先于內(nèi)部實現(xiàn)簡單。

 

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

 

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

 

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

 

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

 

我們知道在C語言的開發(fā)環(huán)境中,所謂庫文件包含兩個部分,頭文件部分和二進(jìn)制文件部分。根據(jù)二進(jìn)制文件和用戶目標(biāo)文件結(jié)合方式的不同,又可分為靜態(tài)鏈接文件和動態(tài)鏈接文件。這種庫的構(gòu)成模式已成為事實上的C語言開發(fā)環(huán)境的標(biāo)準(zhǔn),絕大多數(shù)平臺、絕大多數(shù)編譯器都使用這種模式 117-301 190-721 。

 

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

 

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

 

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

 

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

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

評論

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

這個文章是系列的嗎,使原創(chuàng)還是翻譯的  回復(fù)  更多評論   

# re: C++類庫設(shè)計的基本思想和方法 2009-10-21 13:51 網(wǎng)絡(luò)監(jiān)控

"頭文件的類庫設(shè)計方式"有什么優(yōu)點?對于一些比較復(fù)雜的類豈不是頭文件很大  回復(fù)  更多評論   

# re: C++類庫設(shè)計的基本思想和方法 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.   回復(fù)  更多評論   

# re: C++類庫設(shè)計的基本思想和方法 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.   回復(fù)  更多評論   

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

比較麻煩而且不符合軟件開發(fā)的一般習(xí)慣。  回復(fù)  更多評論   

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

也就是說,關(guān)于簡單性的設(shè)計原則,外部接口簡單優(yōu)先于內(nèi)部實現(xiàn)簡單。<a href="http://www.joomlahostings.org/">best joomla hosting</a>  回復(fù)  更多評論   

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

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

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

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

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

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

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

C + +中繼續(xù)使用,是首選的編程語言之一,以開發(fā)專業(yè)應(yīng)用  回復(fù)  更多評論   

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

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

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

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

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

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

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

C + +中繼續(xù)使用,是首選的編程語言之一,以開發(fā)專業(yè)應(yīng)用  回復(fù)  更多評論   

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

你真的已經(jīng)搭上了眾多關(guān)注的目光似乎  回復(fù)  更多評論   

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

的C ++繼續(xù)使用和開發(fā)專業(yè)應(yīng)用首選的編程語言之一。  回復(fù)  更多評論   

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

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

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

我們只能有選擇地支持一部分環(huán)境。我們在開篇就已經(jīng)說明,我們選擇g++和Visual C++編譯器  回復(fù)  更多評論   

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

,也就是說,關(guān)于簡單性的設(shè)計原則,外部接口簡單優(yōu)先于內(nèi)部實現(xiàn)簡單。  回復(fù)  更多評論   

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

我們只能有選擇地支持一部分環(huán)境。我們在開篇就已經(jīng)說明,我們選擇g++和Visual C++編譯器   回復(fù)  更多評論   

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

、網(wǎng)絡(luò)流量、磁盤空間等等,來維持正常的程序功能。提高性能的主要手段是數(shù)據(jù)結(jié)構(gòu)、算法和程序體現(xiàn)結(jié)構(gòu)的優(yōu)化設(shè)計  回復(fù)  更多評論   

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

我們只能有選擇地支持一部分環(huán)境。我們在開篇就已經(jīng)說明,我們選擇g++和Visual C++編譯器  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導(dǎo)航

統(tǒng)計

常用鏈接

留言簿(4)

隨筆檔案

網(wǎ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>
            日韩视频免费在线| 99re热精品| 麻豆精品视频在线观看| 美腿丝袜亚洲色图| 久久成人精品电影| 欧美一区视频在线| 久久久精彩视频| 久久精品国产第一区二区三区| 亚洲欧洲免费视频| 久久亚洲午夜电影| 欧美.日韩.国产.一区.二区| 老司机一区二区三区| 欧美与黑人午夜性猛交久久久| 国产精品日本精品| 国产欧美高清| 亚洲国产精品嫩草影院| 黑人巨大精品欧美一区二区小视频| 亚洲一区在线直播| 亚洲在线视频免费观看| 亚洲欧美欧美一区二区三区| 亚洲午夜免费视频| 久久精品免费观看| 欧美人成在线视频| 国产精品高潮呻吟| 国产亚洲福利一区| 最新国产成人在线观看| 亚洲一级在线观看| 久久婷婷麻豆| 99精品热视频只有精品10| 午夜亚洲伦理| 欧美啪啪成人vr| 国产日韩欧美三区| 日韩一区二区福利| 久久久综合网站| 99爱精品视频| 美乳少妇欧美精品| 国产亚洲精品一区二555| 日韩视频一区二区三区在线播放| 欧美涩涩视频| 国产日韩欧美视频在线| 一区在线观看视频| 亚洲男人第一网站| 亚洲国产一区二区精品专区| 香蕉久久夜色精品国产| 欧美日韩网址| 亚洲国产精品一区二区尤物区| 欧美三级网址| 亚洲第一区色| 欧美一区视频| 日韩视频在线观看国产| 蜜桃av噜噜一区| 国产欧美日韩一级| 亚洲欧美日韩中文视频| 亚洲国产日韩在线| 亚洲一区二区在线看| 欧美日韩国产另类不卡| 亚洲国产精品123| 久久久久青草大香线综合精品| 欧美一区二区成人6969| 亚洲精品国产无天堂网2021| 久久国内精品视频| 国产日韩精品入口| 亚洲一区二区三区色| 亚洲美女免费视频| 欧美成人高清视频| 亚洲国产毛片完整版| 欧美高清视频在线播放| 久久综合网hezyo| 在线欧美电影| 欧美福利网址| 欧美xxx在线观看| 亚洲免费成人av电影| 日韩写真在线| 亚洲激情在线视频| 欧美r片在线| 欧美凹凸一区二区三区视频| 亚洲啪啪91| 亚洲免费观看| 欧美亚州一区二区三区| 亚洲欧美美女| 午夜精品视频在线| 在线播放亚洲一区| 91久久久久久久久久久久久| 欧美激情视频给我| 亚洲男人的天堂在线aⅴ视频| 亚洲欧洲av一区二区| 亚洲精品久久在线| 午夜精品一区二区三区在线播放| 快she精品国产999| 亚洲精品资源美女情侣酒店| 亚洲国产免费看| 欧美三级免费| 久久精品欧美日韩| 久久精品国产99| 亚洲乱码国产乱码精品精98午夜 | 国产欧美二区| 久久成人免费日本黄色| 久久久亚洲一区| 亚洲精品女人| 亚洲综合色丁香婷婷六月图片| 麻豆精品传媒视频| 99国产精品一区| 午夜精品av| 亚洲精品日韩久久| 亚洲免费视频一区二区| 亚洲激情网站| 性欧美8khd高清极品| 亚洲欧洲偷拍精品| 亚洲欧美日韩人成在线播放| 亚洲国产精品一区二区第一页| 亚洲激情影视| 在线视频免费在线观看一区二区| 久久人人爽国产| 欧美性猛交xxxx免费看久久久 | 欧美午夜精品一区| 久久久夜夜夜| 欧美久久久久| 久久免费视频网| 欧美体内谢she精2性欧美| 欧美成在线视频| 国产一区二区成人| 亚洲一区二区黄色| 一区二区三区导航| 免费一级欧美片在线播放| 欧美在线亚洲一区| 国产精品国产自产拍高清av王其| 亚洲免费不卡| 久久亚洲精选| 免费观看成人鲁鲁鲁鲁鲁视频| 久久精品99国产精品酒店日本| 国产精品欧美日韩一区| 免费黄网站欧美| 欧美主播一区二区三区| 欧美成年网站| 欧美在线视频一区二区| 伊人成人在线视频| 国产精品久久久久77777| 午夜精品久久久久久| 久久久久欧美精品| 亚洲男人的天堂在线aⅴ视频| 欧美一区二区视频观看视频| 中文av一区特黄| 亚洲视频在线视频| 在线亚洲观看| 亚洲福利国产| 欧美综合激情网| 亚洲欧美日韩一区在线观看| 麻豆精品91| 欧美成人dvd在线视频| 国产又爽又黄的激情精品视频| 亚洲欧洲在线播放| 亚洲欧美偷拍卡通变态| 亚洲午夜激情网站| 欧美日韩日韩| 亚洲人精品午夜在线观看| 伊人成人开心激情综合网| 久久久久久亚洲综合影院红桃| 国产婷婷成人久久av免费高清| 99re6热只有精品免费观看| 午夜亚洲视频| 欧美成人一区二区| 在线播放日韩| 欧美理论在线播放| 麻豆国产精品va在线观看不卡| 欧美激情精品久久久久久久变态| 亚洲电影免费在线观看| 免费观看日韩av| 亚洲经典三级| 国产精品免费看| 久久av红桃一区二区小说| 久久激情婷婷| 亚洲欧洲一区二区三区| 蜜桃av噜噜一区| 亚洲——在线| 欧美一区二区三区喷汁尤物| 尹人成人综合网| 欧美日韩一区二区在线视频 | 亚洲国产婷婷香蕉久久久久久99| 久久一区二区三区四区| 欧美成人黄色小视频| 亚洲国产婷婷香蕉久久久久久99| 亚洲精品一二| 国产日韩一区二区三区在线播放| 久久在线播放| 99精品热视频只有精品10| 国产精品黄视频| 久久久久国产精品一区三寸| 麻豆精品视频在线观看视频| 亚洲一区二区三区欧美| 亚洲午夜久久久| 亚洲精品影视在线观看| 亚洲激情av| 免费观看成人www动漫视频| 亚洲精品永久免费| 性欧美在线看片a免费观看| 欧美一区二区视频在线| 欧美片第1页综合| 亚洲精品一区中文| 亚洲大胆人体视频| 欧美亚洲视频在线观看|