我正试图通过一本书来学习线性代数,而作者为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;
}
由于结构简单,我们知道成员x
,y
和z
在内存中是连续的。这意味着以下两个声明将是等效的:
float x, y, z;
float xp[3];
知道这一点,return ((&x)[i]);
等效于以下代码:
float *xp = &x;
return xp[i];
因此,如果用i==0
调用,它将返回x
的值,如果用i==1
调用,它将返回y
的值。相同的逻辑适用于z
。