这里是来自Box2d物理引擎的b2Math.h代码。
为什么我们不能只使用SomeVector.x和SomeVector.y来读写向量坐标?实际上,
struct b2Vec2
{ ...
/// Read from and indexed element.
float operator () (int i) const
{
return (&x)[i];
}
/// Write to an indexed element.
float operator () (int i)
{
return (&x)[i];
}
...
float x, y;
}
为什么我们不能只使用SomeVector.x和SomeVector.y来读写向量坐标?实际上,
return (&x)[i];
这一行是如何工作的呢?我的意思是,在引用结构体的x分量之后,方括号[]中的数组不清楚。
感谢您的回复。
i
等于0
的情况外,(&x)[i]
会导致未定义行为,因为它会尝试在未分配给这样一个数组的内存中进行数组索引操作。 - Cory Krameroperator()
中存在错误:应该返回float&
。 - iksemyonovSomeVector
的声明。我猜你的意思是你有一个变量b2Vec2 SomeVector
。正如其他人已经说过的那样,你可以像你说的那样使用它:SomeVector.x
和SomeVector.y
。 - Code-Apprentice