class中指向Data Members的指针

在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。linux

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

相关文章
相关标签/搜索