爲了使用字符串我需要包含字符串標題,以便它的實現變得可用。但如果是這樣,爲什麼我仍然需要添加行using std::string
?爲什麼在#include <string>之後仍然需要使用std :: string?
爲什麼不知道字符串數據類型?
#include <string>
using std::string;
int main() {
string s1;
}
爲了使用字符串我需要包含字符串標題,以便它的實現變得可用。但如果是這樣,爲什麼我仍然需要添加行using std::string
?爲什麼在#include <string>之後仍然需要使用std :: string?
爲什麼不知道字符串數據類型?
#include <string>
using std::string;
int main() {
string s1;
}
由於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
}
Namespace
是C++,它定義一個變量,函數或對象的範圍,並避免名稱衝突的附加特徵。這裏,string
對象在std
命名空間中定義。
std
是標準命名空間。 cout
,cin
,string
以及許多其他的東西在裏面定義。
標題<string>
聲明瞭與字符串庫相關的各種實體,而名稱空間用於分組相關的功能並允許在不同的名稱空間中使用相同的名稱。
因爲類string
的聲明位於命名空間std中。因此,您需要始終通過std :: string訪問它(然後您不需要使用它),或者像您那樣做。
using std::string;
並不意味着您現在可以使用此類型,但可以使用此類型,而不必在類型名稱前指定名稱空間std::
。
下面的代碼是正確的:
#include <string>
int main()
{
std::string s1;
return 0;
}
使用命名空間std和使用字符串直接 –
是不是不好的做法把一條線嗎?我嘗試只爲我需要的東西使用「使用」。 – vanmarcke
@vanmarcke這是一個不好的做法,你正確使用它。 – mpiatek