C++ Data Member语意

Data Member语意

class object的大小可能比想象的要大,原因在于:
1. 由编译器自动加上的额外 data members,用以支持某些语言特性(主要是各种virtual特性)。
2. 因为alignment(边界调整)的需要。

1. Data Member的布局

class Point3d
{
   
public:
    //...
private:
    float x;
    static List<Point3d*> *freeList;
    float y;
    static const int chunkSize = 250;
    float z;
};

Nonstatic data members 在class object中的排列顺序将和其被声明的顺序一样,任何中间介入的static data members如freeList和chunkSize都不会被放进对象布局之中。

C++ Standard要求,在同一个access section(也就是private、public、protected等区段)中,members的排列只需符合“较晚出现的members 在class object中有较高的地址”这一条件即可。

各个members并不一定得连续排列。 中间可能会有边界调整。

C++ Standard也允许编译器将多个access sections之中的data members自由排列,不必在乎它们出现在class声明中的顺序。

2. Data Member的存取

Point3d origin, *pt = &origin;

2.1 Static Data Members

每一个 static data member 只有一个实例,存放在程序的 data segment 之中。

每次程序取用 static member时,就会被内部转化为对该唯一 extern 实例的直接取用操作。

//origin.chunkSize = 250;
Point3d::chunkSize
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值