2017-02-24 1 views
0

文字列を使用するには、その実装が利用できるように文字列ヘッダーを含める必要があります。しかし、そうであれば、なぜ私はまだusing std::string行を追加する必要がありますか?#includeの後にstd :: stringを使用するのはなぜですか?<string>?

なぜ文字列データ型について知っているのですか?

#include <string> 

using std::string; 

int main() { 
    string s1; 
} 
+0

直接 –

+6

名前空間stdと使用文字列を使用して線を入れて、その悪い習慣はありませんか?私は、必要なものに対してのみ '使用する 'ことを試みます。 – vanmarcke

+5

@vanmarckeこれは悪い習慣であり、正しく使用しています。 – mpiatek

答えて

5

stringstdと呼ばれる名前空間内で定義されているので。

<string>が含まれていますが、using std::stringを追加することができますし、(そうstd::stringstringようにrefferedされる可能性があります)スコープで名前空間を使用していないところどこでもstd::stringを書くことができます。あなたは、関数の内部で、たとえば、それを配置することができますし、それだけでその機能に適用されます。

#include <string> 

void foo() { 
    using std::string; 

    string a; //OK 
} 

void bar() { 
    std::string b; //OK 
    string c; //ERROR: identifier "string" is undefined 
} 
+1

? – vanmarcke

+2

@vanmarckeこれはstd名前空間内の文字列ヘッダーに定義されています。私の答えの最後にリンクを見てください。 – mpiatek

1

Namespaceは、変数、関数やオブジェクトの範囲を定義し、名前の衝突を回避されるC++の追加機能です。 。ここでは、stringオブジェクトはstd名前空間で定義されています。

stdは標準名前空間です。 cout,cin,などがあり、他にも多くのことが定義されています。

ヘッダー<string>は、文字列ライブラリに関連するさまざまなエンティティを宣言しますが、名前空間は関連する機能をグループ化し、異なる名前空間で同じ名前を使用することができます。

2

クラスstringの宣言が名前空間stdにあるためです。したがって、あなたはいつもstd :: string経由でアクセスする必要があります(使用する必要はありません)。

7

using std::string;このタイプを使用できるわけではありませんが、タイプの名前の前にネームスペースstd::を指定しなくてもこのタイプを使用できます。

次のコードは正しいです:

#include <string> 

int main() 
{ 
    std::string s1; 
    return 0; 
} 
関連する問題