爲什麼這個代碼<string>與<string.h>之間的區別?
std::map <std::string , int> m;
m["a"]=1;
與(我使用的是2010 MSVC)
#include <string>
但與
#include <string.h>
編譯?
爲什麼這個代碼<string>與<string.h>之間的區別?
std::map <std::string , int> m;
m["a"]=1;
與(我使用的是2010 MSVC)
#include <string>
但與
#include <string.h>
編譯?
<string.h>
包含像strcpy
,strlen
對於C風格的null結尾的字符串老功能。<string>
主要包含std::string
,std::wstring
和其他類。string.h
是C的頭文件,而string
是C++的頭文件。
''
不是!
<string.h>
是爲c_string - http://www.cplusplus.com/reference/clibrary/cstring/
<string>
是C++字符串類 - 按照以下尼科爾流星錘評論http://www.cplusplus.com/reference/string/
編輯和一點谷歌搜索:
<cstring>
通常會進口同樣的事情<string.h>
但進入std
命名空間。 <string.h>
通常會將所有內容導入到全局名稱空間中。 它似乎取決於您使用的庫實現,雖然根據我的谷歌搜索。
我個人只使用<cstring>
如果我需要C風格字符串助手。
'
使用C風格'.h'頭文件在C++中不推薦使用。 – 2012-02-13 08:56:30
@PrasoonSaurav要被棄用,它必須成爲標準的一部分,從來沒有過。 – 2012-02-13 09:52:55
<string.h>
包含C語言庫的字符串函數。 strlen
,strcmp
等
<string>
包含std::basic_string
的定義,其具有的typedef std::string
和std::wstring
。這是不同的。
他們真的沒有任何關係,這一事實之外,他們都處理字符串。
我相信<string.h>
只用於C和<string>
的C++。所以包括string.h
不會工作。
如上所述,string.h
和cstring
是C頭(而cstring
基本上是一個C++包裝器string.h
),含有C字符串功能,這些功能是由char[]
'\0'
終止。你想使用C++類的字符串,其標頭是<string>
。
它們是完全不同的標題。
<string>
是C++類string
<string.h> or <cstring>
定義函數來操縱C字符串和數組
還應該注意的是,在C++中不推薦使用'string.h'。如果你需要包含的功能,你應該使用頭部'cstring'。這或多或少地完全繞過了「這兩者之間有什麼區別」的問題,因爲很明顯,一個來自C庫。 – 2012-03-11 20:53:40