目前,offsetof
仅适用于标准布局类型。但是,我从来没有理解这个限制。当然,对于具有虚拟继承的类型,offsetof
无效。但对于没有虚拟继承的类型,它可以。我知道,该标准允许非标准布局类型为每个实例具有不同的成员偏移量。但是,我从来没有听说过使用它的任何编译器实现。为什么会这样做呢?
我所知道的所有编译器,对于没有虚拟继承的类型,成员的偏移量是编译时常量。
所以问题是:
offsetof
?(我已经在stackoverflow中阅读了很多相关的答案,并在各个地方进行了讨论,但我还没有找到原因)。
答案 0 :(得分:6)
该限制的任意性质由委员会discussed in July。它还没有出现在工作文件中,但我相信它会在C ++ 20中放松(至少在这个程度上)。
答案 1 :(得分:2)
放宽要求到什么? offsetof
可以使用,除非它给出的结果不正确吗?
访问C ++对象的选定数据成员的方法是使用指向数据成员的指针。