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

chbaker0

考虑这样的结构,例如:

struct Foo
{
    int a, b;
};

如果我有一个指针ptr来的int,我知道点bFoo结构,是合法的,这样做呢?

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将指向结构的指针转换为其第一个成员

将指针转换为指针...指向指针?

结构成员未通过指向结构的指针进行更新

指向结构中静态成员的指针

如何将指向本地结构的指针转换为Webassembly?

调用旧版C API时,如何在现代C ++中正确地将指向结构的指针转换为指向其他结构的指针?

将指向派生类成员变量的指针强制转换为指向基类成员变量的指针合法吗?

指向const结构的指针,仍然可以修改成员吗?

将C ++转换为指向相同类型的结构内的结构的C#指针

将指向相同类型的结构成员的结构的指针分配给指向相同类型的结构的另一个指针

将结构转换为成员类型的指针

结构成员指针会溢出吗?

为什么不能在没有强制转换的情况下指向指针,访问结构成员?

指向结构成员的指针,无需初始化

我可以使用指向包含该结构的指针的结构的指针来访问该结构的成员吗

将指向结构的成员的指针传递给函数

使用指向类成员和结构成员的指针之间的区别

C / C ++指向POD结构的指针也指向第一个结构成员

指向字节结构成员的 C 字指针

指向数据结构成员的指针

指向指针成员结构的指针

如何以可移植的方式从指向结构成员的指针计算指向结构开头的指针?

我可以在其成员是指向指针的指针的结构中使用标量初始化吗?

指向结构作为结构成员的指针

如何访问作为指向指针参数的指针传递给函数的结构成员?

将指向部分构造对象的指针转换为指向基类的指针是否合法?

将指向成员的指针类型转换为简单的指针类型

从指向其第二个成员的指针获取指向结构的指针是否合法?

将指向结构的第一个成员的指针强制转换为指向该结构的指针是否合法?