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