gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:54:19 25 4
gpt4 key购买 nike

考虑这样一个结构,例如:

struct Foo
{
int a, b;
};

如果我有一个指向 int 的指针 ptr,我知道它指向 Foo 结构中的 b , 这样做合法吗?

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

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

最佳答案

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

The macro offsetof expands to a constant of type std::size_t, the value of which is the offset, in bytes, from the beginning of an object of specified type to its specified member, including padding if any.

If type is not a standard layout type, the behavior is undefined.

这使得 offsetof 受制于非标准布局类型的类和结构的未定义行为。

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

关于c++ - 我可以合法地将指向结构成员的指针强制转换为指向该结构的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29614513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com