【发布时间】:2008-12-19 22:55:40
【问题描述】:
给定一个FooClass* 类型的变量foo 和该类中名为bar 的成员变量,foo 和&(foo->bar) 之间的距离在任何情况下都相同,但有一些约束:
FooClass是非 POD 类型。我们知道
foo将始终指向FooClass的一个实例,而不是它的某个子类型。我们只关心单个编译器和单个编译下的行为;也就是说,在 gcc 下这可能导致的值永远不会在使用 MSVC 编译的代码中使用,并且永远不会保存以在编译之间重新使用。用二进制计算,用二进制,就是这样。
我们不使用自定义
new,尽管该类的某些实例可能是堆栈分配的,而一些是堆分配的。FooClass没有明确的ctor;它依赖于编译器生成的(FooClass中的每个字段都是 POD 或默认可构造的)。
我无法在标准中找到任何一种方式的保证(我也没有预料到),但我对 gcc 的初步测试让我相信它总是会出现这种情况。我也知道这个保证是针对 POD 类型的,但是让我们假设这种类型不能是 POD。
更新/澄清:这仅适用于单个二进制文件的单个编译;计算出的偏移量永远不会离开那一次执行。基本上,我希望能够在静态映射中唯一标识一个类的字段,然后能够在该映射中查找一些宏/模板/EVIL 技巧。这只是我自己的娱乐,没有生命支持机器会依赖这个代码。
【问题讨论】:
标签: c++