作者:股海一游6888 | 来源:互联网 | 2023-07-21 19:28
已经有几个问题让人们询问C++中类和结构之间的区别。引用最多的差异是默认可见性不同。甚至Stroustrup似乎也暗示基本没有区别。我认为我的问题不是重复的,因为我想
已经有几个问题让人们询问 C++ 中类和结构之间的区别。引用最多的差异是默认可见性不同。甚至 Stroustrup 似乎也暗示基本没有区别。
我认为我的问题不是重复的,因为我想问一些具体和准时的问题:针对类使用结构体在速度、内存使用或效率方面有任何影响吗?可以基于其中的任何优势来选择一个吗?
作为参考,我正在评估一个人的 C++ 代码,该代码仅使用结构体,我将把它移植到资源有限的 ARM 架构中。
回答
对类使用结构体是否对速度、内存使用或效率有任何影响?
没有。没有影响。甚至没有编译时间差异。
此外,如果您想确定某事的性能影响,您应该进行测量和基准测试。如果你不这样做,你永远不会知道。在 StackOverflow 上询问并不能代替测量您自己的程序。
请注意,创建一个正确的基准来衡量正确的事情需要技巧,就像编写好的单元测试可以帮助您在不减慢速度的情况下发现错误一样。
您还可以查看编译器的汇编输出。至于我,我绝对知道两者之间没有区别,因为在我尝试的所有情况下,我都没有观察到两者之间的汇编输出有什么不同。
如果对性能和内存使用有影响,您应该向编译器实现者报告错误。
正如您现在可能知道的那样,除了可见性之外struct
,class
它们被定义为完全相同。的sizeof
一类是一样的具有相同的成员结构的大小。与包含用作基础的类型相比,您甚至可以在没有开销的情况下进行基本继承。例如,std::tuple
与 struct 相比没有开销,但不能在没有继承的情况下实现。
但是,只要添加单个虚函数或虚继承,编译器就会添加一个 vtable 和 RTTI。这是您的类型中引用该元数据的指针。vtable 包含调用虚拟函数、检查向下转换和侧向转换、虚拟基址和类型 ID 的所有元数据。
所以什么时候使用 struct 和 classes 完全是个人喜好。比如我struct
到处都用,因为继承默认是public的,我把public成员放在第一位。