c++ - 为什么某些局部类型声明在 C++ 中以 'struct' 为前缀

标签 c++ struct

我经常看到这样的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/

相关文章:

C++ vector 复制适用于一个 vector ,但不适用于另一个 vector

c# - 对于结构,我是否必须在 C# 中显式调用构造函数?

c++ - 如何在头文件中定义具有继承性的结构?

c++ - 如何制作玻璃背景的 window ?

C++11 std::conditional 在运行时?

c# - QNetworkAccessManager->在 DLL 中调用时卡住

matlab - 在matlab中从结构创建表 - 对齐

c++ - 读取带分隔符的文件

C 数组结构,尝试访问数据,但对所有数组都得出相同的结果

c++ - 带有调试选项的 gcc 编译阶段