您的位置:首页 > 编程语言 > C语言/C++

effective c++:必须返回对象时,别妄想返回其reference

2015-10-31 15:49 302 查看
class Rational
{
public:
Rational(int numerator = 0,int denominator = 1)
{
this -> n = numerator;
this -> d = denominator;
}
private:
friend const Rational operator*(const Rational &a,const Rational &b);
int n,d;
};
const Rational operator*(const Rational& a,const Rational& b)
{
return Rational(a.n * b.n,a.d * b.d);
}//返回一个const避免a * b = c这种错误的表达形式
//由if(a * b == c)少打一个=造成
//这是正确的形式
const Rational& operator*(const Rational& a,const Rational& b)
{
Rational result(a.n * b.n,a.d * b.d);
return result;
}//函数结束局部变量将会销毁

const Rational& operator*(const Rational& a,const Rational& b)
{
Rational* result = new Rational(a.n * b.n,a.d * b.d);
return *result;
}//存在内存泄露问题w = x * y * z;

const Rational& operator*(const Rational& a,const Rational& b)
{
static Rational result;
result = Rational(a.n * b.n,a.d * b.d);
return result;
}//无法比较(a * b) == (c * d)静态变量导致等式总是成立


虽然返回值构造成本和析构成本有些时候确实很高,但是为了正确,这个代价也不算什么

并且编译器往往会施行优化,有些时候operator*返回值的构造和析构可以被安全的消除。即使不被消除,程序速度往往也会比预期实现的要快

昨天又帮同学装了个系统,虽然装好了,但是浪费了好多时间,我觉得开始进入bios的过程存在盲目的乱试,应该直接上网查如何进入bios选项,然后一次成功。

又想到了那句话,高手喜欢先思考,再做决定,菜鸟才喜欢盲目的瞎尝试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息