C联合数组和变量?

新手上路,请多包涵

没有办法做这样的事情,在 C++ 中有吗?

 union {
    {
        Scalar x, y;
    }
    Scalar v[2];
};

哪里 x == v[0]y == v[1]

原文由 mpen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 431
2 个回答

我以前用过这样的东西。我不确定它是否 100% 符合标准,但对于我需要使用它的任何编译器来说似乎都可以。

 struct Vec2
{
  float x;
  float y;
  float& operator[](int i) { return *(&x+i); }
};

如果需要(您可能应该想要),您可以向 operator[] 添加边界检查等,并且您也可以提供 operator[] 的 const 版本。

如果您担心填充(并且不想添加适当的平台特定位来强制取消填充结构),那么您可以使用:

 struct Vec2
{
  float x;
  float y;
  float& operator[](int i) {
    assert(i>=0);
    assert(i<2);
    return (i==0)?x:y;
  }
  const float& operator[](int i) const {
    assert(i>=0);
    assert(i<2);
    return (i==0)?x:y;
  }
};

原文由 Michael Anderson 发布,翻译遵循 CC BY-SA 4.0 许可协议

既然您使用的是 C++ 而不是 C,而且它们属于相同类型,为什么不直接将 xa 引用到 v[0] 并将 ya 引用到 v[1]

原文由 Brian R. Bondy 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏