gpt4 book ai didi

c++ - 从指向某个成员的指针获取指向对象的指针

转载 作者:IT老高 更新时间:2023-10-28 22:02:08 25 4
gpt4 key购买 nike

假设有一个结构

struct Thing {
int a;
bool b;
};

我得到一个指向该结构的成员 b 的指针,比如某个函数的参数:

void some_function (bool * ptr) {
Thing * thing = /* ?? */;
}

如何获得指向包含对象的指针? 最重要的是:在不违反标准中的某些规则的情况下,我想要标准定义的行为,而不是未定义或实现定义的行为。

附带说明:我知道这会绕过类型安全。

最佳答案

如果您确定指针确实指向结构中的成员 b,就像有人这样做了

Thing t;
some_function(&t.b);

那么您应该可以使用 offsetof获取结构指针的宏:

std::size_t offset = offsetof(Thing, b);
Thing* thing = reinterpret_cast<Thing*>(reinterpret_cast<char*>(ptr) - offset);

请注意,如果指针 ptr 实际上并不指向 Thing::b 成员,那么如果使用该指针,上述代码将导致未定义的行为东西.

关于c++ - 从指向某个成员的指针获取指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33870219/

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