【发布时间】:2012-02-22 10:44:09
【问题描述】:
我是否可以安全地假设数据成员 (offsetof(mystruct, myfield)) 的偏移量在数值上等于使用 &mystruct::myfield 检索到的成员指针的原始值,还是依赖于实现?
【问题讨论】:
-
不应该这样假设。您忘记了编译器可能会插入用于管理为对象分配的内存的开销(内存)。
-
一个更好的问题是:既然您知道这两种形式,为什么要不使用指向成员的指针? :)
-
我实际上正在考虑使用指向成员的指针,因为我的程序使用 offsetof 做了一些低级技巧,我想将它们“提升”为更标准的形式。
-
从这里的第 7 页:agner.org/optimize/calling_conventions.pdf "Borland 编译器将偏移量 1 添加到数据成员指针,以便区分指向第一个数据成员的指针和 NULL 指针,由 0 表示。另一个编译器没有偏移,但用值 -1 表示 NULL 数据成员指针。”所以有一个非常具体的例子说明你什么时候不能依赖它,以防你想知道这是否只是学术性的。
标签: c++ member-pointers offsetof