C++ 为什么在#include<;之后仍然需要使用std::string;字符串>;?
为了使用字符串,我需要包含字符串头,以便它的实现变得可用。但是如果是这样,为什么我仍然需要使用std::string添加行C++ 为什么在#include<;之后仍然需要使用std::string;字符串>;?,c++,string,include,using,C++,String,Include,Using,为了使用字符串,我需要包含字符串头,以便它的实现变得可用。但是如果是这样,为什么我仍然需要使用std::string添加行 为什么它还不知道字符串数据类型 #include <string> using std::string; int main() { string s1; } #包括 使用std::string; int main(){ 字符串s1; } 因为字符串是在名为std的命名空间中定义的 您可以在包含的任何地方编写std::string,但您可以使用std
为什么它还不知道字符串数据类型
#include <string>
using std::string;
int main() {
string s1;
}
#包括
使用std::string;
int main(){
字符串s1;
}
因为字符串是在名为std
的命名空间中定义的
您可以在包含
的任何地方编写std::string
,但您可以使用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
}
#包括
void foo(){
使用std::string;
字符串a;//确定
}
空条(){
std::字符串b;//确定
字符串c;//错误:标识符“string”未定义
}
因为字符串是在名为std
的命名空间中定义的
您可以在包含
的任何地方编写std::string
,但您可以使用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
}
#包括
void foo(){
使用std::string;
字符串a;//确定
}
空条(){
std::字符串b;//确定
字符串c;//错误:标识符“string”未定义
}
>P> <代码>命名空间< /C>是C++的一个附加特性,它定义变量、函数或对象的范围,避免名称冲突。这里,string
对象在std
名称空间中定义
std
是标准名称空间cout
、cin
、string
以及许多其他内容都在其中定义
标题>代码> <代码>声明与字符串库相关的各种实体,而命名空间用于分组相关功能,并允许在不同命名空间中使用相同名称。
<代码>命名空间< /C> >是C++的另一个特性,它定义变量的范围,函数或对象,避免名称冲突。这里,string
对象在std
名称空间中定义
std
是标准名称空间cout
、cin
、string
以及许多其他内容都在其中定义
标题
声明了与字符串库相关的各种实体,而名称空间用于对相关功能进行分组,并允许在不同的名称空间中使用相同的名称。因为类字符串
的声明位于名称空间std中。因此,您需要始终通过std::string访问它(那么你就不需要有using)或者像你做的那样去做。因为classstring
的声明在名称空间std中。因此你要么总是需要通过std::string访问它(那么你就不需要有using)或者像以前那样做。使用std::string;
并不意味着您现在可以使用此类型,但您可以使用此类型,而无需在类型名称之前指定命名空间std::
以下代码是正确的:
#include <string>
int main()
{
std::string s1;
return 0;
}
#包括
int main()
{
std::字符串s1;
返回0;
}
使用std::string;
并不意味着您现在可以使用此类型,但您可以使用此类型,而无需在类型名称之前指定命名空间std::
以下代码是正确的:
#include <string>
int main()
{
std::string s1;
return 0;
}
#包括
int main()
{
std::字符串s1;
返回0;
}
使用namespace std划一行并直接使用字符串,这不是一种糟糕的做法吗?我尝试只对我需要的东西使用使用。@vanmarcke这是一种糟糕的做法,你使用得对。@vanmarcke了解为什么使用namespace std
是一种糟糕的做法:但在此之前,你必须阅读有关namespace的内容(请参阅mpiatek的答案)使用namespace std并直接使用字符串是不是不好的做法?我试着只对我需要的东西使用使用。@vanmarcke这是一个不好的做法,你用对了。@vanmarcke了解为什么使用namespace std
是一个不好的做法:但在此之前,你必须阅读有关namespace的内容(请参阅mpiatek的答案)那么字符串没有在字符串头中定义?@vanmarcke它是在std名称空间的字符串头中定义的。请查看我答案末尾的链接。那么字符串头中没有定义?@vanmarcke它是在std名称空间的字符串头中定义的。请查看我答案末尾的链接。