我最近问了一个关于结构和优化一些重载运算符的问题。
现在,我已经将这些改进放在心上(或其中一些/大部分),并返回以下函数(非成员函数,因为我希望它们尽可能符合 C)。
inline Vector2& operator+=(Vector2 &a, const Vector2 &b)
{
a.x += b.x;
a.y += b.y;
return a;
}
inline Vector2 operator+(Vector2 a, const Vector2 &b)
{
a += b;
return a;
}
inline Vector2& operator*=(Vector2 &a, const float &n)
{
a.x *= n;
a.y *= n;
return a;
}
inline Vector2 operator*(Vector2 a, const float &n)
{
a *= n;
return a;
}
inline float operator*(const Vector2 &a, const Vector2 &b)
{
return (a.x * b.x) + (a.y * b.y);
}
inline Vector2 rotate(const Vector2 &a, const float &angle)
{
Vector2 out = a;
out *= cos(angle);
out.x -= sin(angle) * a.y;
out.y += sin(angle) * a.x;
return out;
}
(请注意,我省略了减法和另一个乘法运算符,因为它们等同于此处列出的其他运算符)。
我目前无法注意到任何其他潜在的改进。我有没有遗漏任何东西,这会(可能)使这些功能,就像它们目前的状态一样,效率低下?