我刚刚浏览并发现以下内容......
根据惯例,你应该只使用结构用于POD,没有方法等.
我一直认为某些类型是自然结构而不是类,但仍然可以有一些辅助函数作为成员.结构应该仍然是大多数通常规则的POD - 特别是使用memcpy复制必须是安全的.它必须公开所有成员数据.但是,将助手功能作为成员对我来说仍然有意义.我甚至不一定会反对私人方法,尽管我不记得曾经这样做过.虽然它打破了正常的POD规则,但我不反对具有构造函数的结构,只要它们只是初始化 - 少数字段构造函数(重写赋值或析构函数肯定会违反规则).
对我来说,结构直观地是字段的集合 - 数据结构节点或其他 - 而类是抽象.为字段集合提供辅助函数的逻辑位置可能在结构中.
我甚至认为我曾经沿着这些方向阅读过一些建议,尽管我不记得在哪里.
这是否违反公认的最佳做法?
编辑 - POD(普通旧数据)被这个问题误传.特别是,结构可以是非POD纯粹因为成员是非POD - 例如具有std :: string类型成员的聚合.不得使用memcpy复制该聚合.如果有困惑,请看这里.
Bil*_*eal 21
对于它的价值,所有标准STL仿函数都被定义为结构,它们的唯一目的是具有成员函数; STL仿函数不应该有状态.
编辑:就个人而言,struct每当班级有所有公共成员时,我都会使用.只要一个人保持一致,这很重要.
dan*_*n04 10
就语言而言,除了默认private与public访问之外,它无关紧要.选择是主观的.
我个人说struct用于POD,但请记住"POD"并不意味着"没有会员功能".它意味着没有虚函数,构造函数,析构函数或operator=.
编辑:我也使用structs进行简单的 - public访问数据聚合,即使他们的成员不是POD.
我倾向于使用struct很多东西.
对于"传统的"OOP类(代表特定"事物"的类),我倾向于使用,class因为它是一种常见的约定.
但是我的大多数类都不是真正的OOP对象.它们往往是仿函数,特征类和各种其他更抽象的代码概念,我用来表达自己的东西,而不是建模特定的"事物".那些我通常做的struct.它省去了我必须输入的初始值public:,因此它使类定义更短,更容易获得概述.
我也倾向于制作更大,更复杂的课程class.除了这一点很少影响任何事情,因为我更倾向于重构大型复杂的类......然后我留下了一些简单的小东西,这可能是有的struct.
但在任何一种情况下,我都不会认为它是"邪恶的"."邪恶"就是当你做一些积极模糊代码的事情,或者当你做出比必要更复杂的事情时.
但是,每一个C++程序员都知道,struct而且class意味着几乎同样的事情.你不会长时间困惑,因为你看到了一个struct Animal {...};你知道它是一个专门为动物建模的类.所以不,不管你做哪种方式都不是"邪恶的".