Bug list
今天发现了一个一年前的bug,记录一下。
struct Fred14
{
int i;
int j;
};
Fred14 operator += ( const Fred14& f1, const Fred14& f2 ) //error
{
Fred14 f = f1;
f.i += f2.i;
f.j += f2.j;
return f;
}
int main()
{
Fred14 f1 = { 1, 1 }, f2 = { 2, 3 };
f1 += f2;
return 0;
}
上面这段代码是有错误的,重载operator +=的时候,第一个参数被我定义成const的,我以为真正的赋值操作是在函数返回之后才进行,但其实operator +=是直接修改左操作数的。结果在调用+=操作符的时候,f1没有被改变。
operator +=正确的重载方式如下:
Fred14 operator += ( Fred14& f1, const Fred14& f2 )
{
f1.i += f2.i;
f1.j += f2.j;
return f1;
}
这个bug迁延了一年才被其他同事发现,汗颜。。。
struct Fred14
{
int i;
int j;
};
Fred14 operator += ( const Fred14& f1, const Fred14& f2 ) //error
{
Fred14 f = f1;
f.i += f2.i;
f.j += f2.j;
return f;
}
int main()
{
Fred14 f1 = { 1, 1 }, f2 = { 2, 3 };
f1 += f2;
return 0;
}
上面这段代码是有错误的,重载operator +=的时候,第一个参数被我定义成const的,我以为真正的赋值操作是在函数返回之后才进行,但其实operator +=是直接修改左操作数的。结果在调用+=操作符的时候,f1没有被改变。
operator +=正确的重载方式如下:
Fred14 operator += ( Fred14& f1, const Fred14& f2 )
{
f1.i += f2.i;
f1.j += f2.j;
return f1;
}
这个bug迁延了一年才被其他同事发现,汗颜。。。
还没人转发这篇日记