下标访问单个结构字段

时间:2018-01-06 17:31:02

标签: c++ pointers

我在“游戏引擎开发基础 - 01数学”中遇到了以下代码。可以访问完整的代码清单here

struct Vector3D
{
    float x, y, z;

    float& operator[](int i)
    {
        return ((&x)[i]);
    }
}

任何人都可以解释[]运算符如何访问字段y和z?

我认为这种方法的工作原理是首先获取x的地址,然后进行指针运算以获得每个单独的字段。既然如此,你如何保证x,y,z在内存中是连续的?

1 个答案:

答案 0 :(得分:1)

  

有人可以解释[] operator如何授权yz字段吗?

没有。即使代码看起来有效,行为仍未定义。

  

您如何保证xyz在记忆中是连续的?

没有这样的保证:

  

实施对齐要求可能导致两个相邻成员不会在彼此之后立即分配

实现此类的更好方法是使用包含三个元素的数组,然后添加成员函数,返回对xyz的引用:

struct Vector3D {
    std::array<float,3> v;
    float& operator[](int i) {
        return v[i];
    }
    float& x() {
        return v[0];
    }
    float& y() {
        return v[1];
    }
    float& z() {
        return v[2];
    }
}