C++ C++;无法将字符串识别为关键字
我尝试了以下代码:C++ C++;无法将字符串识别为关键字,c++,string,exception,keyword,C++,String,Exception,Keyword,我尝试了以下代码: #include <iostream> using namespace std; int main() { char string[4]='xyz'; return 0; } #包括 使用名称空间std; int main() { 字符字符串[4]='xyz'; 返回0; } 由于字符串是一个关键字,编译器应该给出错误,但运行正常。有人能解释为什么它能成功编译。string不是关键字 它是标准库中声明的类型的名称 当你给它命名时,你
#include <iostream>
using namespace std;
int main()
{
char string[4]='xyz';
return 0;
}
#包括
使用名称空间std;
int main()
{
字符字符串[4]='xyz';
返回0;
}
由于字符串是一个关键字,编译器应该给出错误,但运行正常。有人能解释为什么它能成功编译。
string
不是关键字
它是标准库中声明的类型的名称
当你给它命名时,你在做一件叫做阴影的事情。下面的示例更清楚地说明了这一点:
{
int x = 0;
{
int x = 5;
std::cout << x << std::endl;
}
std::cout << x << std::endl;
}
在这里,MyStruct在该范围内被重写
在您的示例中,
std::string
string
不是关键字时也会发生同样的情况
它是标准库中声明的类型的名称
当你给它命名时,你在做一件叫做阴影的事情。下面的示例更清楚地说明了这一点:
{
int x = 0;
{
int x = 5;
std::cout << x << std::endl;
}
std::cout << x << std::endl;
}
在这里,MyStruct在该范围内被重写
在您的示例中,
std::string
string
不是关键字。string
不是关键字,它只是std
命名空间中的标识符。您已经创建了一个新的标识符字符串
,它是主函数的本地标识符。另外,我假定您的意思是“xyz”
而不是“xyz”
。此外,虽然
可能包含
,但它在任何地方都不能保证或指定。如果要使用std::string
,则应始终显式包含
标题。@AndreasWenzel——这是一个很好的建议,但请注意阴影应用于所有名称,而不仅仅是变量名称。在这种情况下,变量string
的名称会隐藏类型string
的全局名称string
不是关键字。string
不是关键字,它只是std
命名空间中的标识符。您已经创建了一个新的标识符字符串
,它是主函数的本地标识符。另外,我假定您的意思是“xyz”
而不是“xyz”
。此外,虽然
可能包含
,但它在任何地方都不能保证或指定。如果要使用std::string
,则应始终显式包含
标题。@AndreasWenzel——这是一个很好的建议,但请注意阴影应用于所有名称,而不仅仅是变量名称。在这种情况下,变量string
的名称会隐藏类型string
的全局名称(因为您知道,使用名称空间std
)。