gpt4 book ai didi

c++ - 将单个属性类转换为属性类型

转载 作者:行者123 更新时间:2023-11-28 06:18:16 24 4
gpt4 key购买 nike

只包含一个属性的类是否可以转换为属性的类型?

此示例按预期打印 1。但它能保证有效吗?

class A {
private:
int x = 1;
};

int main()
{
A a;
cout << *((int*)&a) << endl; // (1)
cout << *(int*)(((char*)&a)+offsetof(A, x)) << endl; // (2) //requires x to be public

return 0;
}

编辑:
还是有另一种方法可以在不修改 A 的情况下访问 a.x?

最佳答案

这不能保证(至少我在 C++ 规范中没有发现任何关于它的信息)但是常见的编译器实现确实将类或结构的第一个元素放在首位,因此它与结构本身具有相同的地址。

但是您将得到一个一般未定义行为的工作案例是否接受取决于您的实际需求。例子:

  • 这段代码只会在有限的环境中运行(您自己的机器或您可以控制的一些机器)=> 您只需要记录事实并测试编译器版本的每次更改
  • 代码将包含在一个不合理的应用程序中,该应用程序将仅以二进制形式部署 => 以红色闪烁字体对其进行记录,但您可以考虑使用它
  • 此代码将包含在一个合理的应用程序中,该应用程序将部署到许多不同的系统 => 算了吧

关于c++ - 将单个属性类转换为属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816629/

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