需要帮助了解此基本Vector3D结构的代码

问题描述 投票:0回答:1

我正试图通过一本书来学习线性代数,而作者为Vector3D的基本结构保留了代码块。我理解除带有float&运算符和const float&运算符的两个块之外的所有内容。如果可以在此处深入了解代码,可以吗?

我试图用谷歌搜索运算符的用法,这使得这两个代码块似乎正在发生某种隐式转换,但是我对其他所有内容仍然感到茫然。

#include <iostream>
using namespace std;

//Math Engine

struct Vector3D
{
    float x, y, z;

    Vector3D(float X, float Y, float Z)
    {
        x = X;
        y = Y;
        z = Z;
    }

    Vector3D() = default;

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

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

int main()
{
    return 0;
}
c++ math vector 3d linear-algebra
1个回答
0
投票

由于结构简单,我们知道成员xyz在内存中是连续的。这意味着以下两个声明将是等效的:

float x, y, z;
float xp[3];

知道这一点,return ((&x)[i]);等效于以下代码:

float *xp = &x;
return xp[i];

因此,如果用i==0调用,它将返回x的值,如果用i==1调用,它将返回y的值。相同的逻辑适用于z

© www.soinside.com 2019 - 2024. All rights reserved.