2017-02-24 89 views
0

爲了使用字符串我需要包含字符串標題,以便它的實現變得可用。但如果是這樣,爲什麼我仍然需要添加行using std::string爲什麼在#include <string>之後仍然需要使用std :: string?

爲什麼不知道字符串數據類型?

#include <string> 

using std::string; 

int main() { 
    string s1; 
} 
+0

使用命名空間std和使用字符串直接 –

+6

是不是不好的做法把一條線嗎?我嘗試只爲我需要的東西使用「使用」。 – vanmarcke

+5

@vanmarcke這是一個不好的做法,你正確使用它。 – mpiatek

回答

5

由於string被命名空間稱爲std內定義。

你可以寫std::string隨處其中包括<string>但可以添加using std::string和範圍不使用命名空間(如此std::string可能被下文稱作爲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是標準命名空間。 coutcin,string以及許多其他的東西在裏面定義。

標題<string>聲明瞭與字符串庫相關的各種實體,而名稱空間用於分組相關的功能並允許在不同的名稱空間中使用相同的名稱。

2

因爲類string的聲明位於命名空間std中。因此,您需要始終通過std :: string訪問它(然後您不需要使用它),或者像您那樣做。

7

using std::string;並不意味着您現在可以使用此類型,但可以使用此類型,而不必在類型名稱前指定名稱空間std::

下面的代碼是正確的:

#include <string> 

int main() 
{ 
    std::string s1; 
    return 0; 
}