



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、typedef 聲明,簡(jiǎn)稱typedef ,為現(xiàn)有類型創(chuàng)建一個(gè)新的名字。比如人們常常使用ypedef來(lái)編寫更美觀和可讀的代碼。所謂美觀,意指typedef能隱藏笨拙的語(yǔ)法構(gòu)造以及平臺(tái)相關(guān)的數(shù)據(jù)類型,從而增強(qiáng)可移植性和以及未來(lái)的可維護(hù)性。typedef使用最多的地方是創(chuàng)建易于記憶的類型名,用它來(lái)歸檔程序員的意圖。類型出現(xiàn)在所聲明的變量名字中,位于"typedef"關(guān)鍵字右邊。例如:typedef int size;此聲明定義了 一個(gè)int的同義字,名字為 size。注意typedef 并不創(chuàng)建新的類 型。它僅僅為現(xiàn)有類型 添加一個(gè)同義字。你可以在 任何需要int的上下文 中使
2、用size.typedef還可以掩飾符合 類型,如指 針和數(shù)組。例如,你不用象下面這樣重復(fù)定義有81個(gè)字符元素 的數(shù)組:char lin e81;char text81;定義一個(gè)typedef ,每當(dāng)要用到相同類型和大小的數(shù)組時(shí),可以這樣:typedef char Lin e81;Line text, sec on dli ne;typedef 有另外一個(gè)重要的用途,那就是定義機(jī)器無(wú) 關(guān)的類型,例如,你可以定義 一個(gè)叫REAL的浮點(diǎn)類型,在 目標(biāo)機(jī)器上 它可以i獲得最高的精度:typedef long double REAL;在不支持long double 的機(jī)器上,該typedef 看起來(lái)會(huì)
3、是下面這樣:typedef double REAL;并且,在連double都不支持 的機(jī)器上,該typedef看起來(lái)會(huì)是這樣:typedef float REAL;你不用對(duì)源 代碼做任何修改,便可以在 每一種平臺(tái)上編譯這個(gè)使用REAL類型的 應(yīng)用程序。唯一要改的是typedef 本身。在大多數(shù)情況下,甚 至這個(gè)微小的變動(dòng)完 全都可以通過(guò)奇妙 的條件編譯來(lái)自動(dòng)實(shí) 現(xiàn)。不是嗎?標(biāo)準(zhǔn)庫(kù)廣泛 地使用typedef 來(lái)創(chuàng) 建這樣 的平臺(tái) 無(wú)關(guān)類型:size_t , ptrdiff 和fpos_t 就是其中的例 子。此外,象st d:string 和std:ofstream 這樣 的typedef 還隱
4、藏了長(zhǎng)長(zhǎng) 的,難以理解 的模板特 化語(yǔ)法,例如: basic_stri ngvchar, char_traits<char>, allocator<char>> 禾口 basic_ofstream<char, char_traits<char>> 。注1:注意typedef 與define 的區(qū)別typdef kkk int *kkk a,b則a,b類型相同define kkk int *kkk a,b則a,b類型不同注2:typedef in t (*mac_liste n_fun c)(i nt*,char*);mac_liste n_
5、func mlf1,mlf2;等價(jià)定義:in t (*mlf1)(i nt*,char*);in t (*mlf1)(i nt*,char*);上面的方式使用比較方便,可讀性也比較好。typedef 聲明,簡(jiǎn)稱 typedef ,為現(xiàn)有類型創(chuàng)建一個(gè)新的名字。比如人們常常使用typedef來(lái)編寫更美觀和可讀的代碼。所謂美觀,意指typedef能隱藏笨拙的語(yǔ)法構(gòu)造以及平臺(tái)相關(guān)的數(shù)據(jù)類型,從而增強(qiáng)可移植性和以及未來(lái)的可維護(hù)性。本文下面將竭盡全力來(lái)揭示typedef 強(qiáng)大功能以及如何避免一些常見(jiàn)的陷阱。如何創(chuàng)建平臺(tái) 無(wú)關(guān)的數(shù)據(jù)類型,隱藏笨拙且難以理解的語(yǔ)法?使用typedefs為現(xiàn)有類型創(chuàng)建同義字。定
6、義易于記憶的類型名typedef使用最多的地方是創(chuàng)建易于記憶的類型名,用它來(lái)歸檔程序員的意圖。類型出現(xiàn)在所聲明的變量名字中,位于"typedef"關(guān)鍵字右邊。例如:typedef int size;此聲明 定義了 一個(gè)int的同義字,名字為 size。注意typedef 并不創(chuàng)建新的 類型。它 僅僅 為現(xiàn)有類型 添加一個(gè)同義字。你可以在 任何需要int的上下文 中使用 size :void measure(size * psz);size array4;size len = file.getle ngth(); std:vector <size> vs;type
7、def還可以掩飾符合 類型,如指 針和數(shù)組。例如,你不用象下面這樣重復(fù)定義有81個(gè)字符元素的數(shù)組:char lin e81;char text81;定義一個(gè)typedef ,每當(dāng)要用到相同類型和大小的數(shù)組時(shí),可以這樣:typedef char Lin e81;Line text, sec on dli ne;getl in e(text);同樣,可以象下面這樣隱藏指針語(yǔ)法:typedef char * pstr;int mystrcmp(pstr, pstr);這里將帶我 們到達(dá)第一個(gè)typedef 陷阱。標(biāo)準(zhǔn) 函數(shù)strcmp() 有兩個(gè)c'onst char * '類型的
8、參數(shù)。因此,它可能 會(huì)誤導(dǎo)人們象下面這樣 聲明 mystrcmp() :int mystrcmp(c onst pstr, const pstr);這是錯(cuò)誤 的,按照順 序,onst pstr '被解釋 為Char * const '(一個(gè)指 向cha r的常量指 針),而不是Eon st char * '(指向常量char的指針)。這個(gè)問(wèn)題很容 易解決:typedef const char * cpstr;int mystrcmp(cpstr, cpstr); /現(xiàn)在是正確的記?。翰还苁裁?時(shí)候,只要為指針聲明typedef ,那么都要在最終的typedef 名稱 中
9、加一個(gè)const,以使 得該指針本身 是常量,而 不是對(duì)象。代碼簡(jiǎn)化上面討論的typedef 行為有點(diǎn)像#define 宏,用其實(shí)際類型替代同義字。不 同點(diǎn)是typedef 在編譯時(shí)被解釋,因此讓編譯器來(lái)應(yīng)付超越預(yù)處理 器能力的文本替 換。例如:typedef int (*PF) (const char *, const char *);這個(gè)聲明引入了 PF類型作為函數(shù)指針的同義字,該函數(shù)有兩個(gè)con st char * 類型的 參數(shù)以及一個(gè)int類型的 返回值。如 果要使用下列形式 的函數(shù)聲明,那么上述這個(gè)typedef 是不可或缺的:PF Register(PF pf);Register。
10、的參數(shù)是一個(gè) PF類型的回調(diào)函 數(shù),返回某個(gè)函數(shù)的地 址,其署名與先前注冊(cè)的名字相 同。做一次深呼吸。下面我展示一下如果不用typedef ,我們是 如何實(shí)現(xiàn)這個(gè)聲明的:int (*Register (int (*pf)(c onst char *, const char *)(const char *, const char *);很少有程序員 理解它是什么意思,更不用說(shuō)這種費(fèi)解的代碼所 帶來(lái)的出 錯(cuò)風(fēng)險(xiǎn)了。 顯然,這里使用typedef 不是一種特權(quán),而是一種必需。持懷疑態(tài) 度的人可能 會(huì)問(wèn): OK,有人還會(huì)寫這樣的代碼 嗎? ” 快速瀏覽 一下揭示signal()函數(shù)的頭文件<cs
11、 inal> ,一個(gè)有 同樣 接口的函數(shù)。typedef禾口存儲(chǔ)類關(guān)鍵字( storage class specifier )這種 說(shuō)法是 不是有 點(diǎn)令人驚訝,typedef 就像auto ,extern , mutable ,stat ic ,和register 一樣,是一個(gè)存儲(chǔ)類關(guān)鍵字。這并是說(shuō)typedef 會(huì)真正影響對(duì)象的 存儲(chǔ)特性;它只是說(shuō)在語(yǔ)句構(gòu)成上,typedef 聲明看起來(lái)象static ,extern 等類型 的變量聲明。下面將帶到第二個(gè)陷阱:typedef register int FAST_COUNTER; /錯(cuò)誤編譯通不過(guò)。問(wèn)題出在你不能在聲明中有多個(gè)存儲(chǔ)類關(guān)鍵字
12、。因?yàn)榉?hào)typedef已經(jīng)占 據(jù)了存儲(chǔ) 類關(guān)鍵字的位 置,在typedef 聲明中不能用register (或任何其 它存儲(chǔ)類關(guān)鍵字)。促進(jìn)跨平臺(tái)開(kāi)發(fā)typedef 有另外一個(gè)重要的用途,那就是定義機(jī)器無(wú) 關(guān)的類型,例如, 你可以定 義一個(gè)叫REAL的浮點(diǎn)類型,在 目標(biāo)機(jī)器上 它可以i獲得最高的精度:typedef long double REAL;在不支持long double 的機(jī)器上,該typedef看起來(lái)會(huì)是下面這樣:typedef double REAL;并且,在連double都不支持 的機(jī)器上,該typedef看起來(lái)會(huì)是這樣:、typedef float REAL;你不用對(duì)源代碼
13、做任何修改,便可以在 每一種平臺(tái)上編譯這個(gè)使用 REAL類型 的應(yīng)用程序。 唯一要改的是typedef 本身。在大多數(shù)情況下,甚至這個(gè)微小的變動(dòng) 完全都 可以通過(guò)奇妙 的條件編譯來(lái)自動(dòng)實(shí) 現(xiàn)。不是嗎?標(biāo)準(zhǔn) 庫(kù)廣泛 地使用typedef 來(lái)創(chuàng)建 這樣的平臺(tái) 無(wú)關(guān)類型:size_t , ptrdiff 和fpos_t 就是其中的例 子。此外, 象std:string 和std:ofstream 這樣的typedef 還隱藏了長(zhǎng)長(zhǎng)的,難以理解的 模板特化語(yǔ)法,例如:basic_stringvchar, char_traits<char>,allocator<char>>禾口 basic_ofstream<char, char_traits<char>>。窘作者簡(jiǎn)介DannyKalev 是一名 通過(guò) 認(rèn)證 的系統(tǒng)分析師,專攻 C+ 和形式 語(yǔ)言
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 濮陽(yáng)縣2025年五年級(jí)數(shù)學(xué)第二學(xué)期期末監(jiān)測(cè)模擬試題含答案
- 提升自動(dòng)化水平選擇好的電磁閥解決方案
- 供應(yīng)商選擇與評(píng)估管理制度制度
- 投影水幕設(shè)計(jì)施工方案
- 寧波單層廠房施工方案
- 電力搶修施工方案
- 汽車尾燈資料
- 2025年家居業(yè)務(wù)面試題及答案
- 6個(gè)紅包紙折燈籠的制作方法
- 5年級(jí)下冊(cè)英語(yǔ)單詞第三單元帶讀音朗讀
- 學(xué)生信息登記表
- 標(biāo)準(zhǔn)作業(yè)指導(dǎo)書模板(SOP)
- 四川省抗菌藥物臨床應(yīng)用分級(jí)管理目錄2022年版
- 傳統(tǒng)文化寫作課件高中英語(yǔ)人教新課標(biāo)必修三
- 五年級(jí)道德與法治下冊(cè) (我參與我奉獻(xiàn))新課件
- 變壓器產(chǎn)權(quán)移交單協(xié)議書
- 教師師德考核表
- 我的家鄉(xiāng)湖北宜昌介紹宜昌城市介紹課件
- 2023年陜西西安市曲江第二中學(xué)招聘筆試備考試題及答案解析
- 高一年級(jí)上期班主任教育敘事
- 歐派終端培訓(xùn)銷售篇
評(píng)論
0/150
提交評(píng)論