【问题标题】:C++ Structs - Pointless? [duplicate]C++ 结构 - 毫无意义? [复制]
【发布时间】:2012-10-17 17:11:30
【问题描述】:

可能重复:
What are the differences between struct and class in C++

我只是想弄清楚在 C++ 中使用“C 结构”是否基本上没用。使用它们有什么收获吗(而不是简单地创建另一个类)?

在 C 中,结构的意义是显而易见的,只是分组数据的连续分配和访问所述数据的好方法,在 C++ 中,我觉得角色变得更加模糊。

鉴于您可以拥有作为结构成员、实例变量和可见性标签的函数,我在 C++ 中看到的结构和类之间的唯一真正区别是结构成员默认为公共,而类成员默认为私有。在我看来,它们实际上都可以使用相同的底层系统来实现。

所以我在这里遗漏了一些关于 C++ 中结构的用途的内容吗?或者他们已经失去了他们的目的,就像我觉得他们在 C++ 中所做的那样?

【问题讨论】:

  • 嗯...它显然是从 C 继承来的。
  • 阅读Interview with Bjarne Stroustrup的这一部分
  • 是的,我知道它是从 C 继承来的。这根本不是我的问题的目的。我想知道你是否从使用 C++ 中的结构中获得了什么,当它们“搞砸”时(至少在我看来)与它们在 C 中的情况相反。C 中的结构与 C++ 中的结构不同,尽管向后兼容性,并且鉴于它们与类具有完全相同的方面,我想知道您是否通过使用它们获得了任何东西。我真的希望 C++ 中的结构能够保持与 C 中的一样,只是数据的连续分配,没有函数,没有可见性,没有任何东西 - 只是变量。

标签: c++ c


【解决方案1】:

C++ 中的类和结构几乎相同,唯一不同的是,类的默认可见性是 private,而在结构中则是 public

继续在 C++ 中使用结构的原因可能是为了保持语言与 C 兼容,因此将 C 代码移植到 C++ 会更容易,或者让程序员进行这种转换。

关于结构类的用法,我个人使用它们就像在 C 中一样,将相关变量组合在一个“对象”中。

【讨论】:

  • 还有公有继承和私有继承的问题。
  • 好的,谢谢你,约阿希姆。我在我的问题中提到了默认可见性。我知道 C++ 中存在与 C 向后兼容的结构。我很好奇你是否获得了任何性能优势——如果 C++ 中的结构没有被修改为类,那么它们应该只是连续分配的内存块——因为它们是在C中。如果它们不被更改为类就好了。虽然看起来在 C++ 中使用结构并没有任何性能优势,但这是非常不幸的。如果没有开销,结构在 C++ 中可能会非常有用。
【解决方案2】:

在我看来,Structures 不会为您提供任何无法由类实现的东西。 但是,结构体保留在 C++ 中是为了向后兼容 c

【讨论】:

    【解决方案3】:

    毫无疑问,它们存在的原因是为了与 C 兼容。但你是对的,尽管 C++ 中的类和结构之间存在细微差别,但你不能用类来处理结构(反之亦然) .

    我个人只在同一声明在 C 中合法时才使用结构,以强调我正在做的任何事情的类似 C 的性质。

    【讨论】:

      【解决方案4】:

      您可以拥有与 C 中相同的行为,没有人强迫您使用额外的“类”功能。因此,如果您了解它们在 C 中的用途,那么在 C++ 中也应该可以理解(至少是“类 C”部分)。

      【讨论】:

        【解决方案5】:

        它们“使用相同的底层系统”实现的。实际上,您实际上可以使用class 关键字声明一个类型,然后使用struct 关键字定义它。基本上,除了您已经提到的概念差异之外,它们完全相同:默认访问权限。

        我不明白为什么有人会称它们“无用”。关键字的使用成为个人偏好和/或编码标准的问题。比如“对 POD 类型使用 struct”,或者“对没有封装/访问控制的类型使用 struct”。

        在同样成功的情况下,可以将内置的-> 运算符声明为“无用”,因为它等同于*+. 组合。

        【讨论】:

        • -> 语法较少。 class 是一个比 struct 更短的词。结构在 C++ 中是无用的。
        • @Jessy:“......语法更少”无关紧要。 -> 的根源实际上可以追溯到新生的 C 语言,它具有不同的语义,不等同于 *. 的组合。 struct 也错了。为了提供公共访问,class 必须与public: 结合使用,这使得它比struct更长,而不是更短。 struct 不是没用的。它在 C++ 中大量使用,这从 C++ 标准库的实现中可以立即看出。
        • 公共与私人问题没有实际意义;对于大多数课程,要么你必须写私有,要么你必须写公共。我忘了提到 struct 甚至不是一个完整的词。无用意味着其他东西已经做了你所做的,更好。类是一个词,它完成了 struct 所做的一切。结构没有用。
        • @Jessy:不是真的。如果所有内容都应该公开,则无需写private。此外,除了默认访问之外,structclass 之间没有区别,这完全消除了class 以某种方式“更好”的可能性(你是什么意思,真的吗?)。最后,再一次,整个 C++ 标准库在适当的时候大量使用struct。我想知道他们为什么这样做?
        【解决方案6】:

        正如 Joachim Pileborg 已经指出的那样,类和结构在 C++ 中几乎是一回事。

        不过,我建议将 struct 用于具有公共成员的“哑”数据持有者,将 class 用于正确封装的类作为样式约定。

        【讨论】:

          猜你喜欢
          • 2021-07-09
          • 1970-01-01
          • 2017-01-29
          • 1970-01-01
          • 2014-12-27
          • 2010-09-11
          • 2015-04-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多