博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
class中指向Data Members的指针
阅读量:6692 次
发布时间:2019-06-25

本文共 755 字,大约阅读时间需要 2 分钟。

hot3.png

在C++中class中Data Members的指针代表的是Data Member在class object中的位置偏移(offset)。如果一个Data Member在class object的开始位置,那么它的offset就是0,但是C++之父认为这样是不行的,其在将offset+1作为Data Member的offset,即如果一个Data Member在class object的开始位置,那么它的offset就是1。它这么做的原因是来区分“没有指向Data Member的指针”和“指向第一个Data Member的指针”。书中说vs在设计时不是这样的,其如果一个Data Member在class object的开始位置,那么它的offset就是0。

#include 
class X {public: static void fun() { printf("%d\n", &X::a); printf("%d\n", &X::b); printf("%d\n", &X::m); printf("%d\n", &X::n); printf("%d\n", &X::x); printf("%d\n", &X::y); } int a; int b;protected: int m; int n;private: int x; int y;};int main(){ X::fun(); return 0;}
结果如上,是这样的。

然后我在到linux下使用g++试试。

也是一样的,都没有使用C++之父说的那种,书中也只说了进行了特殊处理,然后就一带而过了。

转载于:https://my.oschina.net/u/854744/blog/418488

你可能感兴趣的文章
Daily Scrum - 12/03
查看>>
Android学习笔记--universal_image_loader图片加载框架
查看>>
C++中的也能使用正则表达式----转载
查看>>
.net c# 开发ActiveX组件
查看>>
AngularJS 包含
查看>>
CSS3 @media 查询
查看>>
2019.3.29 区块链论文翻译
查看>>
使用HTML辅助方法载入分部视图
查看>>
检测硬件RDMA卡是否存在
查看>>
递归算法
查看>>
使用Linux的tcpdump命令结合Windows的wireshark抓包和分析
查看>>
数论的题
查看>>
Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
查看>>
《Spring2之站立会议9》
查看>>
0059-乘积问题
查看>>
2019年的第一篇随笔
查看>>
关于公网ip的一些信息(摘抄)
查看>>
5分钟弄懂Docker!
查看>>
BZOJ1076:[SCOI2008]奖励关(状压DP,期望)
查看>>
BZOJ2223/3524:[POI2014] Couriers(主席树)
查看>>