gpt4 book ai didi

C++:获取包含成员子对象的完整对象的地址

转载 作者:太空狗 更新时间:2023-10-29 19:51:15 25 4
gpt4 key购买 nike

我有两个类,大致定义如下:

class Inner {
public:
bool is_first;
};

class Outer {
public:
char some_other_member;
Inner first;
Inner second;
}

我知道 Inner 只存在于 Outer 中,并且相应的 bool 标志将设置为 true 当且仅当如果相应的对象是 first 成员,而不是 second

我正在寻找一种符合标准的方法来派生指向包含某些 Inner 对象的 Outer 对象的指针。当然,我可以只在每个 Inner 对象中存储一个指针,但是由于 Inner 类非常小,而且我有很多,似乎是在浪费内存(因此也是宝贵的缓存)。

显然,编译器应该知道firstsecond 和包含的Outer 对象之间的内存偏移量。问题是:是否有一种符合标准的方式告诉编译器“获取该偏移量,从指向 Inner 的指针中减去它并使其成为 Outer 指针”?

我知道如果 Outer 将包含 Inner 作为基础子对象(例如 this),我可以使用转换为 void - 我非常觉得成员子对象应该有类似的东西?

最佳答案

您应该注意到,从指向成员的指针获取指向父对象的指针的问题通常无法解决。

offsetof 和转换仅适用于 standard layout types .在其他情况下,它是未定义的行为。

例如多重虚拟继承失败。在那种情况下,成员访问是通过比添加编译时偏移量更复杂的方式实现的。也许这实际上不太相关,因为它很少使用,但您明确要求符合标准。

关于C++:获取包含成员子对象的完整对象的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50566894/

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