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

void foo()
{
  struct sockaddr* from;
  // ...
}

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

我过去曾尝试删除它,但没有注意到行为上的差异,但我不确定删除它是否安全。

同样,这两者之间有什么区别?
sizeof(struct sockaddr)
sizeof(sockaddr)

最佳答案

作为一种编码“风格”,这很可能是 C 的遗产,其中关键字是必需的。

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

struct x
{
};

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

就我个人而言,我不认为具有变量或与类型同名的函数是好的风格,我更喜欢完全避免为此目的使用 struct 关键字,但语言允许这样做。

关于c++ - 为什么在 C++ 中一些本地类型声明以 'struct' 为前缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17244233/

10-17 02:01