而下面:??
這里的string編譯器就認(rèn)識(shí)了,但是strcmp就不認(rèn)識(shí)了呢???
一般一個(gè)C++的老的帶“.h”擴(kuò)展名的庫文件,比如iostream.h,在新標(biāo)準(zhǔn)后的標(biāo)準(zhǔn)庫中都有一個(gè)不帶“.h”擴(kuò)展名的相對(duì)應(yīng),區(qū)別除了后者的好多改進(jìn)之外,還有一點(diǎn)就是后者的東東都塞進(jìn)了“std”名字空間中。 ?? 但唯獨(dú)string特別。 ?問題在于C++要兼容C的標(biāo)準(zhǔn)庫,而C的標(biāo)準(zhǔn)庫里碰巧也已經(jīng)有一個(gè)名字叫做“string.h”的頭文件,包含一些常用的C字符串處理函數(shù),比如樓主提到的strcmp。 ?這個(gè)頭文件跟C++的string類半點(diǎn)關(guān)系也沒有,所以<string>并非<string.h>的“升級(jí)版本”,他們是毫無關(guān)系的兩個(gè)頭文件。 ?要達(dá)到樓主的目的,比如同時(shí):??
或者??
?其中<cstring>是與C標(biāo)準(zhǔn)庫的<string.h>相對(duì)應(yīng),但裹有std名字空間的版本。
笑談(來自高質(zhì)量++)
C++標(biāo)準(zhǔn)庫很大。非常大。難以置信的大。怎么個(gè)大法?這么說吧:在C++標(biāo)準(zhǔn)中,關(guān)于標(biāo)準(zhǔn)庫的規(guī)格說明占了密密麻麻300 多頁,這還不包括標(biāo)準(zhǔn)C 庫,后者只是"作為參考"(老實(shí)說,原文就是用的這個(gè)詞)包含在C++庫中。當(dāng)然,并非總是越大越好,但在現(xiàn)在的情況下,確實(shí)越大越好,因?yàn)榇蟮膸鞎?huì)包含大量的功能。標(biāo)準(zhǔn)庫中的功能越多,開發(fā)自己的應(yīng)用程序時(shí)能借助的功能就越多。C++庫并非提供了一切(很明顯的是,沒有提供并發(fā)和圖形用戶接口的支持),但確實(shí)提供了很多。幾乎任何事你都可以求助于它。在歸納標(biāo)準(zhǔn)庫中有些什么之前,需要介紹一下它是如何組織的。因?yàn)闃?biāo)準(zhǔn)庫中東西如此之多,你(或象你一樣的其他什么人)所選擇的類名或函數(shù)名就很有可能和標(biāo)準(zhǔn)庫中的某個(gè)名字相同。為了避免這種情況所造成的名字沖突,實(shí)際上標(biāo)準(zhǔn)庫中的一切都被放在名字空間std 中(參見條款28)。但這帶來了一個(gè)新問題。無數(shù)現(xiàn)有的C++代碼都依賴于使用了多年的偽標(biāo)準(zhǔn)庫中的功能,例如,聲明在<iostream.h>,<complex.h>,<limits.h>等頭文件中的功能。現(xiàn)有軟件沒有針對(duì)使用名字空間而進(jìn)行設(shè)計(jì),如果用std 來包裝標(biāo)準(zhǔn)庫導(dǎo)致現(xiàn)有代碼不能用,將是一種可恥行為。(這種釜底抽薪的做法會(huì)讓現(xiàn)有代碼的程序員說出比"可恥" 更難聽的話)懾于被激怒的程序員會(huì)產(chǎn)生的破壞力,標(biāo)準(zhǔn)委員會(huì)決定為包裝了std 的那部分標(biāo)準(zhǔn)庫構(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++頭文件在未來幾年內(nèi)還是會(huì)被支持。所以,實(shí)際來說,下面是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)化的過程中,庫中有些部分的細(xì)節(jié)被修改了,所以舊頭文件和新頭文件中的實(shí)體不一定完全對(duì)應(yīng)。)標(biāo)準(zhǔn)C 頭文件如<stdio.h>繼續(xù)被支持。頭文件的內(nèi)容不在std 中。具有C 庫功能的新C++頭文件具有如<cstdio>這樣的名字。它們提供的內(nèi)容和相應(yīng)的舊C 頭文件相同,只是內(nèi)容在std 中。所有這些初看有點(diǎn)怪,但不難習(xí)慣它。最大的挑戰(zhàn)是把字符串頭文件理清楚: <string.h>是舊的C 頭文件,對(duì)應(yīng)的是基于char*的字符串處理函數(shù);<cstring>是對(duì)應(yīng)于舊C 頭文件的std 版本;<string>是包裝了std 的C++頭文件,對(duì)應(yīng)的是新的string 類。 如果能掌握這些(我相信你能),其余的也就容易了。
Powered by: C++博客 Copyright © 人生亦編程