このコードはどうして
std::map <std::string , int> m;
m["a"]=1;
コンパイル(MSVC 2010を使用しています)
#include <string>
ではなく
#include <string.h>
?
<string.h>
には、Cスタイルのヌル終了文字列のstrcpy
、strlen
などの古い関数が含まれています。<string>
には主にstd::string
、std::wstring
およびその他のクラス。string.h
はC++ヘッダーではなく、Cヘッダーです。
<string.h>
はcstring- http://www.cplusplus.com/reference/clibrary/cstring/
<string>
はc ++文字列クラスです (http://www.cplusplus.com/reference/string/
以下のニコル・ボーラスのコメントごとに編集し、少しグーグルで:
<cstring>
は通常<string.h>
と同じものをstd
名前空間にインポートします。 <string.h>
は通常、すべてをグローバル名前空間にインポートします。私のグーグルによると、それはあなたが使用しているライブラリの実装に依存しているようです。
個人的には、Cスタイルの文字列ヘルパーが必要な場合にのみ<cstring>
を使用します。
string.h
はCのヘッダーファイルで、string
はC++のヘッダーファイルです。
<string.h>
には、Cライブラリ文字列関数が含まれています。 strlen
、strcmp
など.
<string>
には、std::basic_string
の定義が含まれます。この定義には、typedef std::string
およびstd::wstring
があります。それが違いです。
両方とも文字列を処理するという事実以外は、実際にはまったく関係がありません。
それらはまったく異なるヘッダーです。
<string>
はC++ string
クラスです
<string.h> or <cstring>
は、Cの文字列と配列を操作する関数を定義します
私は信じている <string.h>
は、Cおよび<string>
C++の場合。したがって、string.h
動作しません。
前述のように、string.h
およびcstring
はCヘッダーです(cstring
は基本的にstring.h
のC++ラッパーです)。C文字列の関数はchar[]
は'\0'
で終了しました。ヘッダーが<string>
であるc ++クラス文字列を使用します。
<string.h>
はC標準ライブラリのヘッダーで、<string>
は実際にはcppで、すべてのc標準ヘッダーファイルには.h
cpp以外の拡張子は.h
。