string與string h 的作用和區別《轉》

2021-09-25 15:29:44 字數 1984 閱讀 8448

c++中 string與string.h 的作用和區別

#include 

void  main() 

不能正確執行,提示說是string型別沒有定義 

而下面: 

#include 

using  namespace  std; 

void  main() 

這裡的string編譯器就認識了,但是strcmp就不認識了呢? 

一般乙個c++的老的帶「.h」副檔名的庫檔案,比如iostream.h,在新標準後的標準庫中都有乙個不帶「.h」副檔名的相對應,區別除了後者的好多改進之外,還有一點就是後者的東東都塞進了「std」名字空間中。 

但唯獨string特別。 

問題在於c++要相容c的標準庫,而c的標準庫里碰巧也已經有乙個名字叫做「string.h」的標頭檔案,包含一些常用的c字串處理函式,比如樓主提到的strcmp。 

這個標頭檔案跟c++的string類半點關係也沒有,所以 並非 的「公升級版本」,他們是毫無關係的兩個標頭檔案。 

要達到樓主的目的,比如同時: 

#include 

#include 

using  namespace  std; 

或者 

#include 

#include 

其中 是與c標準庫的 相對應,但裹有std名字空間的版本。 c++標準庫很大。非常大。難以置信的大。怎麼個**?這麼說吧:在c++ 標準中,關於標準庫的規格說明佔了密密麻麻300 多頁,這還不包括標準c 庫,後者只是"作為參考"(老實說,原文就是用的這個詞)包含在c++庫中。

當然,並非總是越大越好,但在現在的情況下,確實越大越好,因為大的庫會包含大量的功能。標準庫中的功能越多,開發自己的應用程式時能借助的功能就越多。c++庫並非提供了一切(很明顯的是,沒有提供併發和圖形使用者介面的支援),但確實提供了很多。幾乎任何事你都可以求助於它。

在歸納標準庫中有些什麼之前,需要介紹一下它是如何組織的。因為標準庫中東西如此之多,你(或象你一樣的其他什麼人)所選擇的類名或函式名就很有可能和標準庫中的某個名字相同。為了避免這種情況所造成的名字衝突,實際上標準庫中的一切都被放在名字空間std 中(參見條款28)。但這帶來了乙個新問題。無數現有的c++**都依賴於使用了多年的偽標準庫中的功能,例如,宣告在 , , 等標頭檔案中的功能。現有軟體沒有針對使用名字空間而進行設計,如果用std 來包裝標準庫導致現有**不能用,將是一種可恥行為。(這種釜底抽薪的做法會讓現有**的程式設計師

說出比"可恥" 更難聽的話)懾於被激怒的程式設計師會產生的破壞力,標準委員會決定為包裝了std 的那部分標準庫構件建立新的頭檔名。生成新標頭檔案的方法僅僅是將現有c++頭檔名中的.h 去掉,方法本身不重要,正如最後產生的結果不一致也並不重要一樣。所以變成了 , 變成了 等等。對於c 標頭檔案,採用同樣的方法,但在每個名字前還要新增乙個c。所以c 的 變成了, 變成了 ,等等。最後一點是,舊的c++標頭檔案是官方所反對使用的(即,明確列出不再支援),但舊的c 標頭檔案則沒有(以保持對c 的相容性)。實際上,編譯器製造商不會停止對客戶現有軟體提供支援,所以可以預計,舊的c++標頭檔案在未來幾年內還是會被支援。

所以,實際來說,下面是c++標頭檔案的現狀:

舊的c++頭檔名如 將會繼續被支援,儘管它們不在官方標 準中。這些標頭檔案的內容不在名字空間std 中。

新的c++標頭檔案如 包含的基本功能和對應的舊標頭檔案相同,但標頭檔案的內容在名字空間std 中。(在標準化的過程中,庫中有些部分的細節被修改了,所以舊標頭檔案和新標頭檔案中的實體不一定完全對應。)

標準c 標頭檔案如 繼續被支援。標頭檔案的內容不在std 中。

具有c 庫功能的新c++標頭檔案具有如 這樣的名字。它們提供的內容和相應的舊c 標頭檔案相同,只是內容在std 中。

所有這些初看有點怪,但不難習慣它。最大的挑戰是把字串標頭檔案理清楚: 是舊的c 標頭檔案,對應的是基於char*的字串處理函式; 是包裝了std 的c++標頭檔案,對應的是新的string 類(看下文); 是對應於舊c 標頭檔案的std 版本。如果能掌握這些(我相信你能),其餘的也就容易了。

標頭檔案string與string h的區別

標頭檔案string與string.h的區別 在c 中,include與 include的區別,前者要使用更新的編譯器 其實大部分編譯器多比較前衛了,出了有些搞嵌入式的用 的編譯器 喔,原來iostream是c 的標頭檔案,iostream.h是c的標頭檔案,即標準的c 標頭檔案沒有.h副檔名,將以...

標頭檔案string與string h的區別

今天再敲 時遇到個問題,vs提示我是string.h還是string,回想起原來遇到過此類問題但是忘記了。在c 中,include與 include的區別,前者要使用更新的編譯器 其實大部分編譯器多比較前衛了,出了有些搞嵌入式的用 的編譯器 喔,原來iostream是c 的標頭檔案,iostream...

標頭檔案string與string h的區別

在c 中,include與 include的區別 前者要使用更新的編譯器 其實大部分編譯器都支援,除了某些搞嵌入式的編譯器 iostream是c 的標頭檔案,iostream.h是c的標頭檔案。標準的c 標頭檔案沒有.h副檔名,將以前的c的標頭檔案轉化為c 的標頭檔案後,有時加上c的字首表示來自於c...