两个不同作用域的同名变量不冲突;
int a;
void fun(void)
{
int a; //允许
}
void fun1(void)
{
int a; //允许
}
两个相同作用域的同名变量冲突。
void fun(void)
{
int a;
//int a; //不允许
}
名称空间是分类别的。
在一个特定作用域内的结构标记、联合标记和枚举标记都共享相同的名称空间,该名称空间与普通变量使用的空间不同。
这意味着在相同作用域中变量和标记的名称可以相同,不会引起冲突。
但是不能在相同作用域中声明两个同名标签或同名变量。
例如,在C中,下面的代码不会产生冲突:
void fun(void)
{
struct rect
{
double x;
double y;
};
int rect; // 在C中不会产生冲突 在C中允许,在 C++ 中不允许
}
尽管如此,以两种不同的方式使用相同的标识符会造成混乱。
另外,C++不允许这样做,因为它把标记和变量名放在同一个名称空间中。