考虑这样的结构,例如:
struct Foo
{
int a, b;
};
如果我指向ptr
的{{1}}指针int
指向b
结构中的Foo
,那么执行此操作是否合法?
Foo *foo = reinterpret_cast<Foo*>(reinterpret_cast<char*>(ptr) - offsetof(Foo, b));
如果是这样,这对任何结构都是合法的吗?如果没有,是否有任何合法的方法来达到同样的效果?
答案 0 :(得分:2)
来自http://en.cppreference.com/w/cpp/types/offsetof:
宏 offsetof 扩展为类型
std::size_t
的常量,其值是从指定类型的对象的开头到其指定成员的偏移量(以字节为单位),包括填充(如果有的话)。如果type不是standard layout type,则行为未定义。
这使得offsetof
的使用受到非标准布局类型的类和结构的未定义行为的影响。
对于标准布局类型的类和结构,我没有看到任何潜在的问题。