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++之父說的那種,書中也只說了進行了特殊處理,而後就一帶而過了。指針

相關文章
相關標籤/搜索