关于c ++:这两个声明有什么区别?


What's the difference between these two declarations?

本问题已经有最佳答案,请猛点这里访问。

我只是在C++的上下文中提问。

1
2
3
4
5
6
7
struct x1 { ... };
typedef struct { ... } x2;
int main()
{
    x1 a;
    x2 b;
}


第一个定义了一个名为x1的类。

第二个定义了一个未命名的类,还定义了一个类型别名,名称为x2

C++中的差别非常微妙。您可以通过尝试用相同的名称声明函数来观察差异:

1
2
void x1(); // OK
void x2(); // not OK, redefined as a different type of symbol

在实践中,您应该避免使用与同一名称空间中的类相同的名称定义函数,因此这种区别几乎不会出现。第一个通常是首选的,因为它比较简单。

在C语言中,差异对标识符的使用影响更大。