为什么允许字符串字符串并且编译器不允许使用int int?

bjs*_*123 9 c++ types

我只是想检查编译器是否允许类型名称作为变量名称.我试过的时候

int int;
Run Code Online (Sandbox Code Playgroud)

它报告了一个错误说

错误C2632:'int'后跟'int'是非法的

但是当我尝试的时候

#include <string>
using namespace std;

int main()
{
    string string;
}
Run Code Online (Sandbox Code Playgroud)

它没有给出任何错误.这两个stringint是数据类型.

为什么编译器允许string但不允许int

编辑:包括更新.

编辑:有些人说int不是一个类.在这种情况下,为什么允许下面的行.

int a(10);
Run Code Online (Sandbox Code Playgroud)

它的工作方式类似于类的构造函数.

cod*_*ict 22

string不是C++ reserved word,但是int,保留字不能用作标识符.

并且它的语法很好,让类名和对象名相同.

class test {}; 
int main() { 
        test test; // test is an object of type test.
} 
Run Code Online (Sandbox Code Playgroud)

  • 注意:完全没问题,但是如果你在实际代码中执行此操作,任何维护者都会杀了你**)+1 (14认同)
  • 这个答案是正确的,但是我认为"它的名称和对象名称相同"是一个问题.标准可能允许它,但它非常"不错". (2认同)

Chu*_*dad 6

int是一个C++关键字.在第二个声明'string string'中声明一个类型的对象'std::string'.在此之后,名称"string"隐藏'std::string'在不合格的查找中

#include <string>
using std::string;

int main(){
    string string;

    string s;  // Error
}
Run Code Online (Sandbox Code Playgroud)