gpt4 book ai didi

c++ - 从数据成员中获取非 POD 对象的地址,该数据成员是一次性嵌套类

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:32 26 4
gpt4 key购买 nike

我将从一些代码开始:

class myNonPODClass
{
public:
virtual ~myNonPODClass() {}
class
{
public:
myNonPODClass* GetContainer()
{
return (myNonPODClass*)((int8_t*)(this) - offsetof(myNonPODClass, member));
}
} member;
};

显然,这是一个人为的例子。代码编译正常,但我担心“非 POD 类型 'myNonPODClass' 的偏移量”。有没有更好的方法来做基本相同的事情而不必将 myNonPODClass 指针传递给嵌套的匿名类构造函数(或类似的)? "member"必须在没有任何初始化的情况下准备就绪。是否可以?谢谢!

如果您想知道我究竟想要这个做什么,我的 PROPERTY 宏和一个关于 pastebin 的注释示例(是的,它很棒 ^^):http://pastebin.com/xnknf39m

最佳答案

根据 C++ 规范,由于以下几个原因,此代码不起作用:

  1. offsetof 需要 POD 类型(在 C++11 中,它需要标准布局类型)。您的类型不是,因此调用它会导致未定义的行为。
  2. 转换为 int8_t* 然后再转换为另一种类型是根据 C++ 规范未定义的行为。您需要使用 char*,它具有某些宽松的转换规则。

关于c++ - 从数据成员中获取非 POD 对象的地址,该数据成员是一次性嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856480/

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