C++ プロジェクトに標準ヘッダー string.h を含める最良の方法はどれですか? 次のように、最後に [dot]h を使用します。
#include <string.h>
またはただ書いている
#include <string>
それとも、私が知らない別の方法を使用していますか?
ありがとう!
これらは 2 つの異なるヘッダーです。
<string>
C++std::string
クラス用です<string.h>
は、c 文字列関数 (など) 用です。これは、c++ プロジェクト用strlen()
である必要があります(これは 3 番目で、あなたが知りませんでした)。<cstring>
そのかなり違う!
<string.h>
Cスタイルの文字列用のこのライブラリ
<string>
C++ 文字列用
<cstring>
C++ の標準では、代わりに使用する必要があります<string.h>
ウィキは次のように述べています。
C++ 標準ライブラリには、「.h」で終わる ISO C90 C 標準ライブラリの 18 個のヘッダーも組み込まれていますが、それらの使用は非推奨です。C++ 標準ライブラリの他のすべてのヘッダーは、「.h」で終わらないでください。
C 標準ライブラリの各ヘッダーは、C++ 標準ライブラリに別の名前で含まれています。これは、.h を削除し、先頭に「c」を追加することによって生成されます。たとえば、「time.h」は「ctime」になります。
string は、テンプレート クラス 'string' を提供する c++ stl headfile です。string.h は、使用する多くの関数を提供する C 標準の headfile です。strlen strcpy memcpy のように。グローブ名前空間を使用しない名前空間 std で使用する場合、または string.h を使用したくない場合は、代わりに cstring を使用できます。
多くの*.h
場合、ヘッダー ファイルは C ヘッダー ファイルであり、おそらくextern "C" { ... }
ラッピングを使用して C++ で使用できます。
何もないヘッダー*.h
は通常、本物の C++ ヘッダーです。
これはあくまでも経験則です。
最新および以前の C++ 標準 (c++11、C++03) では<cstdio>
、名前空間などを使用して、元の C ヘッダーを適切にラップするようなヘッダーが定義されています。
標準は
#include <string>