類的數據成員的布局是按某種順序的,有一個相對與類的頭位子的偏移量,這個偏移量的計算方法如下:
(size_t)&(((classname*)0)->members)
classname 是一個類名,members是類中任何一個數據成員的名字。0在這里是一個地址,這是一個保留地址,它不能作為左值,但可以作為右值,去提取其中的對象。
在0地址位,構造了一個classname的結構布局。
在使用中去每次寫這個表達式還是很麻煩的。可以用個宏將其包起來,如下
#difine offsetof( ClassName, MemberName ) (size_t)&(((classname*)0)->members)
其實這個宏在windows和linux平臺下都以提供了。
posted on 2007-04-08 10:54
walkspeed 閱讀(1059)
評論(0) 編輯 收藏 引用 所屬分類:
C++語言