考虑这样的结构,例如:
struct Foo
{
int a, b;
};
如果我有一个指针ptr
来的int
,我知道点b
的Foo
结构,是合法的,这样做呢?
Foo *foo = reinterpret_cast<Foo*>(reinterpret_cast<char*>(ptr) - offsetof(Foo, b));
如果是这样,这对任何结构合法吗?如果没有,是否有任何合法的方法来达到同样的效果?
从http://en.cppreference.com/w/cpp/types/offsetof:
宏offsetof扩展为type的常量
std::size_t
,其值是从指定类型的对象的开头到其指定成员的偏移量(以字节为单位),包括填充(如果有的话)。如果type不是标准布局type,则行为是未定义的。
offsetof
对于非标准布局类型的类和结构,这会利用对象的未定义行为。
对于标准布局类型的类和结构,我看不到任何潜在的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句