2012-01-30 43 views
1

我可以安全地假设数据成员的偏移量(offsetof(mystruct, myfield))在数值上等于使用&mystruct::myfield检索的成员指针的原始值,还是与实现有关?是一个指向数据成员的偏移量?

+0

不应该这样认为。您忘记了编译器可能会插入的用于管理为对象分配的内存的开销(内存)。 – DumbCoder 2012-01-30 16:35:50

+3

更好的问题是:既然你知道这两种形式,你为什么不*使用指向成员的指针? :) – 2012-01-30 16:41:48

+0

我实际上正考虑使用指向成员的指针,因为我的程序使用offsetof做了一些低级技巧,并且我想将它们“提升”到更标准的形式。 – 2012-01-30 16:51:54

回答

3

否;没有指定对成员指针的实现,并且没有定义的转换来获取“原始”值。

0

形式上,它是依赖于实现的,当然。在现实生活中,是的,指针到数据成员指针的最流行的实现是(或基于)计划和简单偏移,即与offsetof评估的相同。

某些实现使用精确的偏移量,采用0xFFF...模式来表示空指针值。一些执行模块为空指针值保留0x000...模式,同时将所有“非空”偏移量增加1