Possible Duplicate:
What are the differences between struct and class in C++
号
我只是想弄清楚在C++中使用"C结构"是没有用的。你通过使用它们(而不是简单地创建另一个类)获得什么吗?
在C中,结构的点是显而易见的,只是分组数据的连续分配和访问这些数据的好方法,在C++中,我觉得角色变得更模糊了。
由于您可以拥有结构、实例变量和可见性标签的成员,所以我在C++中的结构和类之间唯一的真正区别是Stutt成员默认为公共,而类成员默认为私有。在我看来,它们实际上都可以用相同的底层系统实现。
那么,我在这里忽略了C++中结构的目的吗?或者他们已经失去了他们的目的,因为我觉得他们在C++?
- 好。。。它显然是从C遗传来的。
- 还有stackoverflow.com/questions/5432681/…
- 阅读比亚恩·斯特劳斯特鲁普访谈的这部分。
- 是的,我知道它是从C继承来的。这根本不是我问题的目的。我想知道你是否从C++中使用了结构,当它们被"搞乱"(至少在我看来)与C语言中的结构相反时,C中的结构与C++中的结构不一样,尽管向后兼容,并且考虑到它们具有与类相同的确切方面,我想知道你是否通过使用它们获得了任何东西。我真的希望C++中的结构将保持在C中,只是数据的连续分配,没有函数,没有可见性,没有任何东西-只是变量。
在我看来,结构不会提供任何类无法实现的东西。但是,为了保持与C的向后兼容性,结构保持在C++中。
C++中的类和结构几乎是相同的,它们唯一的区别是类的默认可见性是EDCOX1(0),而在结构中,它是EDCOX1(1)。
在C++中保持结构的原因可能是为了保持语言与C兼容,因此将C代码移植到C++更容易,或者使程序员能够实现这种转换。
至于结构反类的用法,我个人使用它们就像在C中一样,将相关变量分组在一个"对象"中。
- 还有公共和私人继承的问题。
- 是的,谢谢你,约阿希姆。我在我的问题中提到了默认可见性。我知道C++中的结构与C是向后兼容的。我很好奇,如果你得到了任何性能上的好处——如果C++中的结构没有被修改成类,那么它们应该只是连续分配的内存块——就像在C.一样,如果它们没有被修改成类,那就太好了。虽然在C++中使用结构没有任何性能上的好处,但这是非常不幸的。如果没有开销,结构在C++中可能非常有用。
它们是"用相同的底层系统"实现的。实际上,您可以使用class关键字声明一个类型,然后使用struct关键字定义它。基本上,除了您已经提到的概念差异之外,它们完全相同:默认访问权限。
我不明白为什么人们会说它们"无用"。关键字的使用成为个人偏好和/或编码标准的问题。比如"对吊舱类型使用struct",或者"对没有封装/访问控制的类型使用struct"。
如果成功程度相同,则可以声明内置的->运算符"无用",因为它与*和.组合等效。
- ->更少的语法。类是比结构短的单词。C++中的结构是无用的。
- @杰西:"…是较少的语法"是不相关的。->的词根实际上可以追溯到c的早期,在这里它有不同的语义,不等同于*和.的组合。关于struct也有错误。为了提供公共访问,class必须与public:结合,这使得它比struct长得多,而不是短得多。struct不是无用的。它在C++中大量使用,这在C++标准库的实现中是显而易见的。
- 公共和私有的问题是没有意义的;对于大多数类,要么你必须写私有的,要么你必须写公共的。我忘了说结构甚至不是一个完整的词。无用意味着其他东西已经做了你所做的,更好。类是一个单词,它完成结构所做的一切。结构没有用处。
- @杰西:不是真的。在一切都应该公开的情况下,不需要写private。另外,除了默认访问之外,struct和class之间没有区别,这完全消除了class以某种方式"更好"的可能性(您的意思是什么,真的?)最后,再一次,整个C++标准库在适当的时候大量使用EDCOX1 3。我想知道他们为什么这么做?
毫无疑问,它们存在的原因是为了与C兼容,但你是对的,尽管C++中类和结构之间的差别很小,但是你不能用结构来做任何你不能用类来做的事情(反之亦然)。
我个人只在同一声明在C中合法时使用结构,以强调我正在做的任何事情的C类性质。
正如Joachim Pileborg已经指出的,C++中的类和结构几乎是一样的。
不过,我建议将struct用于具有公共成员的"哑"数据持有者,将class用于适当封装的类作为样式约定。
您可以有与C中相同的行为,没有人强迫您使用附加的"类"特性。因此,如果你理解他们在C中的目的,它在C++中也应该是可以理解的(至少是"C类"部分)。