我可以合法地将指向结构成员的指针强制转换为指向结构的指针吗?

时间:2015-04-13 20:30:41

标签: c++ pointers

考虑这样的结构,例如:

struct Foo
{
    int a, b;
};

如果我指向ptr的{​​{1}}指针int指向b结构中的Foo,那么执行此操作是否合法?

Foo *foo = reinterpret_cast<Foo*>(reinterpret_cast<char*>(ptr) - offsetof(Foo, b));

如果是这样,这对任何结构都是合法的吗?如果没有,是否有任何合法的方法来达到同样的效果?

1 个答案:

答案 0 :(得分:2)

来自http://en.cppreference.com/w/cpp/types/offsetof

  

offsetof 扩展为类型std::size_t的常量,其值是从指定类型的对象的开头到其指定成员的偏移量(以字节为单位),包括填充(如果有的话)。

     

如果type不是standard layout type,则行为未定义。

这使得offsetof的使用受到非标准布局类型的类和结构的未定义行为的影响。

对于标准布局类型的类和结构,我没有看到任何潜在的问题。