为什么C++中的ClassName ClassName变量定义正在编译并正常工作?

sha*_*oth 2 c++ compiler-construction definition

说我有一个类定义:

class CustomClass {
    int member;
};
Run Code Online (Sandbox Code Playgroud)

为什么以下变量定义正在编译并正常工作:

CustomClass CustomClass; // the variable is properly constructed
Run Code Online (Sandbox Code Playgroud)

这不应该混淆编译器并导致它指示错误吗?

Don*_*hey 10

类名和变量名占据两个独立的名称空间.编译器能够确定第一个CustomClass是类型,第二个CustomClass是变量名.

  • 您在此处描述的命名空间的概念是C语言中的正确术语.在C++中,有一些规则特别允许这一点而不引用命名空间.它简单地归结为允许类型和对象,或类型被其他声明隐藏的类型和函数. (2认同)