1 樓fangrk(加把油,伙計(jì)?。?input class="star2" title="二星用戶 該版得分小于等于30000分,,大于10000分" type="button">回復(fù)于 2002-08-30 16:33:14 得分 0
如果string name;該包含string.h 如果stcpy(),;又該包含string string.h是舊式的C-Style string是標(biāo)準(zhǔn)C++支持的,,功能比C-Style強(qiáng)大很多。 Top
2 樓fangrk(加把油,,伙計(jì)?。?input class="star2" title="二星用戶 該版得分小于等于30000分,大于10000分" type="button">回復(fù)于 2002-08-30 16:34:24 得分 0
-------------------------------------------------------------------------------- 條款49: 熟悉標(biāo)準(zhǔn)庫(kù) C++標(biāo)準(zhǔn)庫(kù)很大,。非常大,。難以置信的大。怎么個(gè)大法,?這么說(shuō)吧:在C++標(biāo)準(zhǔn)中,,關(guān)于標(biāo)準(zhǔn)庫(kù)的規(guī)格說(shuō)明占了密密麻麻300多頁(yè),,這還不包括標(biāo)準(zhǔn)C庫(kù),后者只是 "作為參考"(老實(shí)說(shuō),,原文就是用的這個(gè)詞)包含在C++庫(kù)中,。
當(dāng)然,并非總是越大越好,,但在現(xiàn)在的情況下,,確實(shí)越大越好,因?yàn)榇蟮膸?kù)會(huì)包含大量的功能,。標(biāo)準(zhǔn)庫(kù)中的功能越多,,開發(fā)自己的應(yīng)用程序時(shí)能借助的功能就越多。
C++庫(kù)并非提供了一切(很明顯的是,,沒有提供并發(fā)和圖形用戶接口的支持),但確實(shí)提供了很多,。幾乎任何事你都可以求助于它,。
在歸納標(biāo)準(zhǔn)庫(kù)中有些什么之前,需要介紹一下它是如何組織的,。因?yàn)闃?biāo)準(zhǔn)庫(kù)中東西如此之多,,你(或象你一樣的其他什么人)所選擇的類名或函數(shù)名就很有可能和標(biāo)
準(zhǔn)庫(kù)中的某個(gè)名字相同。為了避免這種情況所造成的名字沖突,,實(shí)際上標(biāo)準(zhǔn)庫(kù)中的一切都被放在名字空間std中(參見條款28),。但這帶來(lái)了一個(gè)新問題。無(wú)數(shù)
現(xiàn)有的C++代碼都依賴于使用了多年的偽標(biāo)準(zhǔn)庫(kù)中的功能,,例如,,聲明在<iostream.h>,<complex.h>,,
<limits.h>等頭文件中的功能?,F(xiàn)有軟件沒有針對(duì)使用名字空間而進(jìn)行設(shè)計(jì),如果用std來(lái)包裝標(biāo)準(zhǔn)庫(kù)導(dǎo)致現(xiàn)有代碼不能用,,將是一種可
恥行為,。(這種釜底抽薪的做法會(huì)讓現(xiàn)有代碼的程序員說(shuō)出比 "可恥" 更難聽的話)
懾于被激怒的程序員會(huì)產(chǎn)生的破壞力,標(biāo)準(zhǔn)委員會(huì)決定為包裝了std的那部分標(biāo)準(zhǔn)庫(kù)構(gòu)件創(chuàng)建新的頭文件名,。生成新頭文件的方法僅僅是將現(xiàn)有C++頭文件名中
的 .h
去掉,,方法本身不重要,正如最后產(chǎn)生的結(jié)果不一致也并不重要一樣,。所以<iostream.h>變成了<iostream>,,
<complex.h>變成了<complex>,等等,。對(duì)于C頭文件,,采用同樣的方法,,但在每個(gè)名字前還要添加一個(gè)c。所以C
的<string.h>變成了<cstring>,,<stdio.h>變成了<cstdio>,,等等。
最后一點(diǎn)是,,舊的C++頭文件是官方所反對(duì)使用的(即,,明確列出不再支持),但舊的C頭文件則沒有(以保持對(duì)C的兼容性),。實(shí)際上,,編譯器制造商不會(huì)停止
對(duì)客戶現(xiàn)有軟件提供支持,所以可以預(yù)計(jì),,舊的C++頭文件在未來(lái)幾年內(nèi)還是會(huì)被支持,。 所以,實(shí)際來(lái)說(shuō),,下面是C++頭文件的現(xiàn)狀: · 舊的C++頭文件名如<iostream.h>將會(huì)繼續(xù)被支持,,盡管它們不在官方標(biāo)準(zhǔn)中。這些頭文件的內(nèi)容不在名字空間std中,。 · 新的C++頭文件如<iostream>包含的基本功能和對(duì)應(yīng)的舊頭文件相同,,但頭文件的內(nèi)容在名字空間std中。(在標(biāo)準(zhǔn)化的過程中,,庫(kù)中有些部分的細(xì)節(jié)被修改了,,所以舊頭文件和新頭文件中的實(shí)體不一定完全對(duì)應(yīng)。) · 標(biāo)準(zhǔn)C頭文件如<stdio.h>繼續(xù)被支持,。頭文件的內(nèi)容不在std中,。 · 具有C庫(kù)功能的新C++頭文件具有如<cstdio>這樣的名字。它們提供的內(nèi)容和相應(yīng)的舊C頭文件相同,,只是內(nèi)容在std中,。
所有這些初看有點(diǎn)怪,但不難習(xí)慣它,。最大的挑戰(zhàn)是把字符串頭文件理清楚:<string.h>是舊的C頭文件,,對(duì)應(yīng)的是基于char*的字符
串處理函數(shù);<string>是包裝了std的C++頭文件,,對(duì)應(yīng)的是新的string類(看下文),;<cstring>是對(duì)應(yīng)
于舊C頭文件的std版本。如果能掌握這些(我相信你能),,其余的也就容易了,。
關(guān)于標(biāo)準(zhǔn)庫(kù),需要知道的第二點(diǎn)是,庫(kù)中的一切幾乎都是模板,??纯茨愕睦吓笥裪ostream。(如果你和iostream不是朋友,,轉(zhuǎn)到條款2,,看看你為
什么要和它發(fā)展關(guān)系)iostream幫助你操作字符流,但什么是字符,?是char嗎,?是wchar_t?是Unicode字符,?一些其它的多字節(jié)字符,?
沒有明顯正確的答案,所以標(biāo)準(zhǔn)庫(kù)讓你去選,。所有的流類(stream
class)實(shí)際上是類模板,,在實(shí)例化流類的時(shí)候指定字符類型。例如,,標(biāo)準(zhǔn)庫(kù)將cout類型定義為ostream,,但ostream實(shí)際上是一個(gè)
basic_ostream<char>類型定義(typedef )。
|