文档章节

class中指向Data Members的指针

首席吹牛官
 首席吹牛官
发布于 2015/05/22 12:51
字数 287
阅读 4
收藏 0

在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 <cstdio>

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++之父说的那种,书中也只说了进行了特殊处理,然后就一带而过了。

本文转载自:http://blog.csdn.net/zhx6044/article/details/30020115

首席吹牛官
粉丝 9
博文 368
码字总数 191938
作品 0
闵行
程序员
私信 提问
C++对象模型学习——Data语意学

对于下面代码,sizeof的结果: 结果的大小和机器还有编译器都有关。 从class X并不是空,它有一个隐藏的1byte大小,这是编译器安插进去的一个char。这使得这 一class的两个objects得以在内存...

thanatos_y
2016/07/06
58
0
《深度探索C++对象模型》读书笔记(1)

《深度探索C++对象模型》读书笔记(1)。 在C++中,有两种class data members:static和nonstatic,以及三种class member functions:static、nonstatic和virtual.已知下面这个class Point声...

长平狐
2012/10/08
68
0
《深度探索C++对象模型》读书笔记第三章:Data语意学

《深度探索C++对象模型》读书笔记第三章Data语意学 空类的大小(sizeof) 一个空类的大小通常为1,是因为编译器为其安插了一个char,以便这个类的任意两个object能够在内存中配置独一无二的地址...

qq_25467397
2018/05/24
0
0
C++对象模型学习——Function语意学

如果有一个Point3d的指针和对象: 当这样做: 时,会发生什么事?其中的Point3d::normalize()定义如下: 而其中的Point3d::magnitude()又定义如下: 答案是不明确的。C++支持三种类型的membe...

thanatos_y
2016/07/09
39
0
C/C++ Strict Alias 小记

什么是Aliasing? 理解strict aliasing一文中这样描述: 当两个指针指向同一块区域或对象时,我们称一个指针 alias 另一个指针。 strict aliasing一文中这样描述: Aliasing 是指多于一个的左...

晨曦之光
2012/05/08
361
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员web前端分享逻辑运算

  一门计算机语言,编程的核心在于逻辑思想,当我们在编写程序的时候,逻辑是否通顺,是能否正确写出程序的关键,可以说如果你掌握了逻辑,那么你就踏入了计算机编程的大门。 &&与 || 或 ...

好程序员IT
14分钟前
1
0
我的Linux系统开始学习的过程

我的Linux系统开始学习的过程 Linux系统,不知大家是否了解。接触计算机不多或对计算机不感冒的人可能对其比较陌生,曾经的我也是。上大学前的我的确对Linux一无所知,那时候接触面窄,都没有...

linuxCool
14分钟前
1
0
让自己的网站可以被搜索

第一步:先注册一个属于自己的域名,这个域名是独一无二的。推荐到主机屋注册一个,其实在哪里注册都是一样的,但是主机屋提供免费的地址解析服务(只对在主机屋注册的域名免费)。 主机屋官...

WinkJie
17分钟前
1
0
全站加速(DCDN)- IP应用加速产品解读

5月22日下午15点,阿里云全站加速(DCDN)-IP应用加速如期发布。IP应用加速是阿里云自主研发的一款更高效、更安全、更便捷的动态加速产品,结合阿里云CDN本身的资源优势,利用就近接入、智能...

阿里云官方博客
20分钟前
1
0
k8s常用命令

1.创建deployment资源kubectl apply -f nginx.yml2.删除deployment资源kubectl delete -f nginx.yml3.查看deployment资源基本信息deployment资源(运行的服务资源)kubectl get...

平头哥-Enjoystudy
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部