为了使用字符串,我需要包含字符串标题,以便它的实现可用。但如果是这样,为什么我仍然需要添加行using std::string
?
为什么它不知道字符串数据类型?
#include <string>
using std::string;
int main() {
string s1;
}
答案 0 :(得分:7)
using std::string;
并不意味着您现在可以使用此类型,但您可以使用此类型,而无需在类型名称之前指定名称空间std::
。
以下代码是正确的:
#include <string>
int main()
{
std::string s1;
return 0;
}
答案 1 :(得分: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}}
答案 2 :(得分:2)
因为类string
的声明在命名空间std中。因此,您需要始终通过std :: string访问它(然后您不需要使用)或者像您一样进行访问。
答案 3 :(得分:1)
Namespace
是C ++的一个附加功能,它定义了变量,函数或对象的范围,避免了名称冲突。这里,string
对象在std
命名空间中定义。
std
是标准命名空间。其中定义了cout
,cin
,string
和许多其他内容。
标头<string>
声明与字符串库相关的各种实体,而名称空间用于对相关功能进行分组,并允许在不同的名称空间中使用相同的名称。