为什么在C++中有一些以'struct'为前缀的本地类型声明

Dre*_*kes 4 c++ struct

我经常看到这样的C++代码:

void foo()
{
  struct sockaddr* from;
  // ...
}
Run Code Online (Sandbox Code Playgroud)

为什么struct需要说明符?它真的做了什么吗?编译器已经知道它sockaddr被声明为一个结构,所以我想知道为什么这是有用的或必要的.

我过去曾尝试删除它,并没有注意到行为上的差异,但我不相信删除它是安全的.

同样,这两者有什么区别?

sizeof(struct sockaddr)
sizeof(sockaddr)
Run Code Online (Sandbox Code Playgroud)

And*_*owl 5

作为编码"风格",这很可能是C的遗产,其中关键字是必需的.

在C++中,在大多数情况下不需要这样做,尽管有时使用它来强制编译器将名称解析为类型名称而不是某个其他实体的名称(如变量,如下例所示):

struct x
{
};

int main()
{
    int x = 42;
    struct x* pX = nullptr; // Would give a compiler error without struct
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我不认为具有变量的好样式或具有与类型相同名称的函数,并且我更愿意避免struct为此目的而使用关键字,但语言允许它.