提问者:小点点

结构和类,关于速度、内存或效率的用法


关于C++中的类和结构之间的区别,人们已经问了几个问题。引用最多的区别是缺省可见性不同。就连斯特鲁斯特鲁普似乎也在暗示,基本上没有什么区别。

我认为我的问题不是重复的,因为我想问一些具体而及时的问题:使用结构来对付类在速度、内存使用或效率方面是否有任何影响?偏爱一个而不是另一个能基于那些东西的任何优点吗?

作为参考,我正在评估一个人专门使用结构的C++代码,并将其移植到一个资源有限的ARM体系结构。


共1个答案

匿名用户

针对类使用结构是否在速度、内存使用或效率方面有任何影响?

没有。没有影响。甚至不编译时差。

此外,如果您想确定某件事情的性能影响,您应该进行度量和基准测试。如果你不知道,你永远也不会知道。对StackOverflow进行询问并不能取代对您自己的程序进行测量。

请注意,创建一个正确的基准来衡量正确的事情需要一些技巧,就像编写好的单元测试来帮助您发现bug,而不会拖慢您的速度一样。

您还可以查看编译器的程序集输出。至于我,我肯定知道两者之间没有区别,因为在我尝试的所有情况下,我观察到两者之间的组装输出没有区别。

如果存在性能和内存使用影响,则应该向编译器实现者报告该bug。

您现在可能已经知道,structclass被定义为除了可见性之外完全相同。类的sizeof与具有相同成员的结构的大小相同。与包含用作基的类型相比,您甚至可以在没有开销的情况下拥有基本继承。例如,std::tuple与结构相比没有开销,但如果没有继承就无法实现。

但是,只要您添加单个虚函数或虚继承,编译器就会添加一个vtable和RTTI。这是您类型中引用元数据的指针。vtable包含调用虚函数、检查向下转换和侧转换、虚拟基位置和类型ID的所有元数据。

所以什么时候使用struct和类完全是个人喜好。例如,我到处使用struct,因为默认情况下继承是public的,我将public成员放在第一位。