说我有一个像这样的矢量类:
struct Vector
{
int x, y;
Vector operator+(Vector rhs)
{
return Vector(x + rhs.x, y + rhs.y);
}
}
我想添加operator+=
。我有两个选择:
此:
Vector& operator+=(Vector rhs)
{
*this = *this + rhs;
return *this;
}
或者这个:
Vector& operator+=(Vector rhs)
{
x += rhs.x;
y += rhs.y;
return *this;
}
使用各自的数学运算符和赋值运算符将其应用于所有其他operator_=
,并使用operator!=
将operator==
应用于 where DATEADD(YY,18,Birthday) >= getdate()
,由于额外的运算符调用,会有任何实际的性能下降,假设经常使用这些运算符?
答案 0 :(得分:1)
都不是。一般来说,我会说用operator+
(效率更高的操作)来编写operator+=
(效率较低的操作)会更好。
Vector& Vector::operator+=(Vector rhs)
{
x += rhs.x;
y += rhs.y;
return *this;
}
Vector operator+(Vector lhs, vector rhs)
{
return lhs += rhs;
}
虽然你的Vector类足够小,但它可能不会产生巨大的差异,