关于class与structure使用的一些总结

struct 由c语言引入。在c语言中,是定义结构化数据的标准选择。

c++ 同时支持struct 和 class, 原因之一是c++ 是 c 的超集,涵盖c 已支持的语言要素,将更好的支持向下兼容(原来能够工作的c 源程序移植到c++,可以支付极少甚至0代价)

 

实际上,c++ 的class已经对struct 进行了完全的覆盖,即是说,原来用struct 实现的结构体,完全可以用class 代替。

那么问题出来了,一个新项目, 什么时候应该使用struct, 同样的东西,用struct实现或者用class实现,性能上有没有区别。

 

struct 和 class 实际在C++ 中没有什么区别。struct 仍然可以继承自另一个struct (很少看到有人这么干)。struct 默认的字段类型是public, 默认的继承方式也是public, 而class 的默认字段类型是private, 默认继承方式也是private。

未见任何文档有描述说struct 比 class 更快。个人感觉既然struct 和 class 在实现上可以互换,也就是说要支持相同的语言级基础设施和复杂度,那么就不应该存在用哪个更快的问题(同等级别对象, 你不能拿一个有4个字段的Rect 结构体 和一个带Hashtable 的ResManager相比)

 

由于struct 和 class 的可替换性,什么时候用struct 和什么时候用class的选择就相当主观了。通常大家的直觉是一致的: struct 应该应用于POD(Plain old data)类型的对象. 用一个词来描述,他们更像是记录, 一个简单的集合,里面有几个字段, 例如 struct Color, struct Rect, struct Point 等都是我们常见的结构。而class 实际上更适合用于抽象主动的对象, 他们通常可以有复杂的继承关系(个人认为太复杂是一种作死的行为,稍后解释)。 或许有更多的方法和逻辑。对于class来讲,内部数据除了理解为记录, 更有一部分是“状态”。

 

另外一种看法:

结构体和类主要的区别就是一个是值类型,一个是引用类型;值类型是写时复制的,引用类型是不会发生写时复制的;当我们需要一个简单不需要继承、不多变的数据时候我们首选结构体,因为在数据结构上来说结构体的存取效率是高于类的,反之当我们需要一个数据结构比较大,需要继承,变化比较多的时候我们选择类,因为在变化的过程中结构体可能会发生写时复制,而类不会


From:https://www.jianshu.com/p/76d4a6573db6

From: https://www.cnblogs.com/BearOcean/p/4298187.html

posted @ 2021-08-23 14:27  Louis93  阅读(344)  评论(0)    收藏  举报