使用 typedef 声明的名称将占用与其他标识符相同的命名空间(不包括语句标签)。 因此,它们不能使用与前一个声明的名称相同的标识符(除了在类类型声明中)。 请看下面的示例:
// typedef_names1.cpp
// C2377 expected
typedef unsigned long UL; // Declare a typedef name, UL.
int UL; // C2377: redefined.
适用于其他标识符的隐藏名称规则也控制使用 typedef 声明的名称的可见性。 因此,以下示例在 C++ 中是合法的:
// typedef_names2.cpp
typedef unsigned long UL; // Declare a typedef name, UL
int main()
{
unsigned int UL; // Redeclaration hides typedef name
}
// typedef UL back in scope