C++ 指向数据成员的指针是否为其偏移量?

C++ 指向数据成员的指针是否为其偏移量?,c++,member-pointers,offsetof,C++,Member Pointers,Offsetof,我是否可以安全地假设数据成员的偏移量(offsetof(mystruct,myfield))在数字上等于使用&mystruct::myfield检索的成员指针的原始值,或者它是否依赖于实现?否;没有指定指向成员的指针的实现,也没有定义用于获取“原始”值的转换。当然,从形式上讲,它依赖于实现。在现实生活中,是的,指向数据成员指针的指针最流行的实现是(或基于)计划和简单偏移,即offsetof的计算结果相同 一些实现使用精确的偏移量,求助于0xFFF…模式来表示空指针值。一些实现为空指针值保留了0x

我是否可以安全地假设数据成员的偏移量(
offsetof(mystruct,myfield)
)在数字上等于使用
&mystruct::myfield
检索的成员指针的原始值,或者它是否依赖于实现?

否;没有指定指向成员的指针的实现,也没有定义用于获取“原始”值的转换。

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


一些实现使用精确的偏移量,求助于
0xFFF…
模式来表示空指针值。一些实现为空指针值保留了
0x000…
模式,但不应假定所有“非空”偏移量都增加
1

No。您忘记了编译器为管理分配给对象的内存而可能插入的开销(内存)。更好的问题是:既然您知道这两种形式,为什么不使用指向成员的指针?:)实际上,我正在考虑使用指向成员的指针,因为我的程序使用offsetof执行一些低级技巧,我想将它们“提升”到更标准的形式。从第7页开始:Borland编译器向数据成员指针添加1的偏移量,以便区分指向第一个数据成员的指针和由0表示的空指针。其他编译器没有偏移量,但用值-1表示空数据成员指针。”因此,这里有一个非常具体的例子,说明您无法依赖它,以防您怀疑这是否只是学术性的。