有效使用reinterpret_cast?

2024-01-08

根据经验,以下工作(gcc 和 VC++),但它是有效且可移植的代码吗?

typedef struct 
{
    int w[2];
} A;

struct B
{
    int blah[2];
};

void my_func(B b)
{
    using namespace std;
    cout << b.blah[0] << b.blah[1] << endl;
}

int main(int argc, char* argv[])
{

    using namespace std;

    A a;
    a.w[0] = 1;
    a.w[1] = 2;

    cout << a.w[0] << a.w[1] << endl;

    // my_func(a);                     // compiler error, as expected
    my_func(reinterpret_cast<B&>(a));  // reinterpret, magic?
    my_func(  *(B*)(&a) );             // is this equivalent? 

    return 0;
}
// Output:
// 12
// 12
// 12
  • reinterpret_cast 有效吗?
  • C 风格的演员阵容是否等效?
  • 目的是让这些位位于&a解释为 B 型,这是有效/最佳方法吗?

(题外话:对于那些想知道的人why我正在尝试这样做,我正在处理两个需要 128 位内存的 C 库,并使用具有不同内部名称的结构 - 与我的示例中的结构非常相似。我不需要 memcopy,也不想修改第 3 方代码。)


在 C++11 中,如果两种类型是布局兼容,这对于相同且具有标准布局的结构来说是正确的。请参阅此答案了解更多详细信息 https://stackoverflow.com/a/7762964/5696.

您还可以在以前版本的 C++ 中将两个结构体粘贴在同一个联合中,这对能够以相同的顺序为不同的结构类型访问相同的数据成员(数据成员的“公共初始序列”)提供了一些保证。

在这种情况下,是的,C 风格的强制转换是等效的,但是reinterpret_cast可能更惯用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效使用reinterpret_cast? 的相关文章

随机推荐

  • Twitter 以编程方式添加照片

    我为 Firefox 制作了裁剪屏幕截图和上传插件 我想带来一个允许用户发布图像的功能 手动 像人类一样 的过程是这样的 打开 twitter com 如果未登录 请告诉用户登录 点击 新推文 就完成了 Attach images by d
  • 比较两个 git 存储库(包括所有分支)

    我有同一个 git 存储库的两个分支 我想检查它们是否完全相同 因此可以安全地删除其中一个而不丢失任何信息 虽然我知道如何比较单个分支 但我想问是否有一种简单的方法来比较所有分支 标签等 最快的方法是添加第二个遥控器并比较输出git ls
  • 如何用 C++ 编写“meta if else if..”?

    我刚刚学习 C 元编程的基础知识 我认为很高兴看到其他人如何解决以下问题 另外 很高兴看到使用 Boost 元编程库的解决方案 因为我认为它们对我来说是黑暗的角落 那么问题来了 是否可以重写得更优雅呢 假设我们有以下结构 template
  • 如何使用 mocha 和 supertest 测试带有标头参数的 Express Rest api?

    我必须测试我的其余 api 某些路由需要用户身份验证令牌的 http 请求标头中的值 我已将有趣的业务逻辑分离为纯 JavaScript 代码 但我找不到方法来测试在 http 请求标头中需要令牌的路由 欢迎摩卡和 或超级测试的任何其他替代
  • Bootstrap 响应式输入表单字段

    我正在使用 input lg 使表单字段变大 我的期望是 当视口缩小时 引导程序默认小于 768px 表单字段会变小并采用正常设置 但事实并非如此 有任何想法吗 bootstrap 可以处理这种情况吗 UPDATE HTML
  • 为什么抽象类有虚函数表?

    关于this https stackoverflow com questions 2592438 does an abstact classes have a vtable post 对于使用 vtable 的实现 答案是 是的 通常 你
  • 三角形 - 三角形相交测试

    我想知道是否有一些教程或指南来理解和在 3D 环境中实现三角形 三角形相交测试 我不需要知道交叉点发生在哪里 只需要知道发生了交叉点 我本来打算按照理论 pdf 来实现它 但我很困惑 计算三角形 2 的平面方程 如果三角形 1 的所有点都在
  • Spring中@Valid注解表示什么?

    在下面的示例中 ScriptFile参数标有 Valid注解 什么是 Valid注释做什么 RequestMapping value scriptfile method RequestMethod POST public String cr
  • Shapely:字符串中的多边形?

    我保存了一些形状多边形的字符串表示 POLYGON 51 0 3 0 51 3 3 61 51 3 3 0 51 0 3 0 有没有一些快速的方法可以直接将其转换回 Polygon 类型 或者我是否需要手动解析字符串来创建 Polygon
  • 如何将双精度数组的数据帧转换为向量?

    我有以下数据帧 其中包含双精度数组 需要将其转换为向量才能将其传递给 ML 算法 谁能帮我这个 fList org apache spark sql DataFrame features array
  • sklearn Logistic 回归 ValueError: X 每个样本有 42 个特征;期待 1423

    我被困在试图解决一个问题 这就是我想做的 我想使用逻辑回归预测缺失值 Nan 分类值 这是我的代码 df 1 我的数据集仅在 Metier 功能中缺少值 我试图预测的缺少值 X train pd get dummies df 1 df 1
  • Google 日历 api 出现错误,例如“domain”:“global”、“reason”:“notFound”、“message”:“Not Found”

    我尝试从日历示例中获取事件列表here https developers google com calendar api v3 reference events list 无论我选择哪一处房产 使用时 我总是收到 404 未找到 错误 任何
  • 背景颜色阻碍 WPF UserControl 内容

    我有一个UserControl 在 XAML 中引用如下
  • 处理 SVN 与 Tortoise 中的冲突?

    每当出现合并冲突或类似问题时 它都会让我慢下来 有人可以向我解释如何强制解决冲突吗 例如 我的一个朋友对存储库中的文件进行了编辑并提交 当他这样做时 我已经重命名了该文件 并在我的工作副本上对其进行了许多编辑 当我去提交时 我明显得到了冲突
  • 如何允许在 WiX 刻录引导程序中选择 MSI 功能?

    我刚刚开始尝试使用 Burn 来尝试链接多个 MSI 文件 我使用的是 WiX v3 6 2705 0 链接正在工作 但我现在正在尝试让可选功能正常工作 我希望这只是将我的 MsiPackage 标签的 EnableFeatureSelec
  • 了解 std::function 和 std::bind

    我正在玩 std function 和 std bind 我注意到一些不直观的东西 我想更好地理解它 例如 void fun void hun std string int main function
  • 将动态值与图像组件一起使用时出现问题反应本机

    我从数据库获取数据并将其放入源图像中 这将是错误的 但如果我只放入字符串它将运行正常 Run ok
  • 将 future 与 boost::asio 一起使用

    有谁有一个很好的指向使用示例的指针来自 Boost 线程库的 futures http www boost org doc libs 1 53 0 doc html thread synchronization html thread sy
  • 如何检测 Ionic 4 离子内容组件中的滚动到达终点?

    在 Ionic v3 ion content 中 有像 scrollTop 这样的属性 在 Ionic v4 中不再有这样的属性 我如何确定用户是否到达了内容的末尾 https ionicframework com docs v3 api
  • 有效使用reinterpret_cast?

    根据经验 以下工作 gcc 和 VC 但它是有效且可移植的代码吗 typedef struct int w 2 A struct B int blah 2 void my func B b using namespace std cout