这两个声明有什么区别?

use*_*070 6 c++

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

struct x1 { ... };
typedef struct { ... } x2;
int main()
{
    x1 a;
    x2 b;
}
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 4

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

第二个定义了一个未命名的类,并通过名称定义了一个类型别名x2

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

void x1(); // OK
void x2(); // not OK, redefined as a different type of symbol
Run Code Online (Sandbox Code Playgroud)

实际上,您应该避免在同一命名空间中定义与类同名的函数,因此这种差异几乎不会出现。第一个通常是首选,因为它更简单。

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