何时使用比使用C ++中的类更合理的结构?


When is using a struct more reasonable than using a class in C++?

本问题已经有最佳答案,请猛点这里访问。

我一直在阅读qt creator的源代码。在使用C++时,使用EDOCX1 0比使用EDCOX1 1Ω更合适?


这纯粹是个人偏好或编码约定的问题。EDCOX1、1和EDCOX1(0)本质上在C++中是相同的,差异是默认的访问说明符和基类是EDOCX1,3为EDCOX1,1,EDCX1,4,EDCOX1,0,4。

例如,在这里,Bar的两个定义是等效的:

1
2
3
class Foo {};
struct Bar : Foo {};
class Bar : public Foo {};

这里也是:

1
2
3
class Foo {};
struct Bar : private Foo {};
class Bar : Foo {};

这里也是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Bar
{
  int n;     // private
 public:
  double x;  // public
};

struct Bar
{
 private:
  int n;
 public:
  double x;
};

此外,您可以将Bar作为class Barstruct Bar互换。


我把struct看作是一个记录。它们将变量捆绑在一起,您希望访问和修改结构成员,而不需要进行间接操作,例如函数调用。例如,当您想将一组数据项写在一起以将它们转储到文件中或通过网络发送时,使用类甚至可能会使代码更难阅读和理解。


除了默认访问(struct=>public,class=>private),没有什么区别。对于可读性,我更喜欢在定义普通的旧C结构(仅数据)时使用struct,或者当我的大多数成员/方法是公共的时使用struct。


当它是普通的、没有任何功能的旧数据时,它可能更适合。在C++中,EDCOX1与0的EDCX1和1的唯一区别在于EDCOX1的1个成员默认为EDCOX1×3,而不是EDCOX1,4为EDCOX1,0。