【问题标题】:Guarantee no padding between structure members to use structure as an array保证结构成员之间没有填充以将结构用作数组
【发布时间】:2013-12-08 05:42:08
【问题描述】:

在下面的例子中调用float z = data.AllCoordinates()[2]总是省钱吗?

struct Data {
    // data members
   float x, y, z;
    // data members
   float* AllCoordinates() { return &x; }
} data;

如果不是,如何保证结构成员之间没有间隙?所以结构的一部分可以像数组一样使用。

【问题讨论】:

  • *保证。你不能,至少不能以标准方式。非标准扩展包括可怕的__attribute__((packed)) 等,但即使在那时我也不确定这是否是未定义的行为。只是不要这样做。

标签: c++ structure padding


【解决方案1】:

不,不是。

如果你想让它表现得像一个数组,为什么不直接声明这个结构来包含一个数组呢?添加例如float & x() { return array[0]; } 如果你愿意的话。

【讨论】:

  • operator[] 用于类似数组的访问。
  • @DyP 同意,尽管这并不能保证没有填充。
猜你喜欢
  • 2011-09-08
  • 2019-03-27
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2016-09-18
相关资源
最近更新 更多