为什么在#include <string>之后仍然需要使用std :: string?

时间:2017-02-24 06:58:35

标签: c++ string include using

为了使用字符串,我需要包含字符串标题,以便它的实现可用。但如果是这样,为什么我仍然需要添加行using std::string

为什么它不知道字符串数据类型?

#include <string>

using std::string;

int main() {
    string s1;
}

4 个答案:

答案 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是标准命名空间。其中定义了coutcinstring和许多其他内容。

标头<string>声明与字符串库相关的各种实体,而名称空间用于对相关功能进行分组,并允许在不同的名称空间中使用相同的名称。