繁体   English   中英

如果也有静态成员,如何排序一个类的成员?

[英]How to order members of a class if there are static members too?

我知道,声明类成员的顺序对于使用较少的内存(基于类型大小的降序)很重要。 例如: class A { int x; double y; int z; }; class A { int x; double y; int z; }; 将比class A { double y; int x; int z; };使用更多的内存class A { double y; int x; int z; }; class A { double y; int x; int z; };

对于最新的编译器(我使用Ubuntu),这仍然适用吗? 如果是,我应该将静态成员放在哪里?

class A
{
private:
  static int m1;
  double m2;
  int m3;

public:
// ...
};

我应该在哪里放置m1以减少内存使用量?

根据C ++标准

静态数据成员不属于类的子对象。

因此,它们在类定义中甚至可能具有不完整的类型。 它们不会影响班级规模。

静态数据成员不存储在类实例中。 相反,您会得到每个实例一个实例 ,并且这些实例在您定义它们的地方“存在”。

struct A
{
  static int m1;
  double m2;
  int m3;
};

int A::m1; // <--- this lives here!

这样,它们的声明在A定义中的位置对于A的非静态数据成员的填充,对齐和排序完全不重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM