为了使用字符串我需要包含字符串标题,以便它的实现变得可用。但如果是这样,为什么我仍然需要添加行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