effective C++ 条款21中关于返回对象的引用问题
我的模仿着写了一个程序:
class Caculate
{
public:
Caculate(int d, int n):denominator(d), numerator(n){}
double getResult()
{
double result = (double)numerator/(double)denominator;
return result;
}
friend const Caculate& operator*(const Caculate& lhs, const Caculate& rhs);
private:
int denominator;//分母
int numerator;//分子
};
const Caculate& operator*(const Caculate& lhs, const Caculate& rhs)
{
Caculate result(lhs.denominator * rhs.denominator,lhs.numerator * rhs.numerator);
return result;
}
然后这样调用它:
Caculate a(2,1);
Caculate b(2,1);
Caculate c = a*b;
cout<<c.getResult()<<endl;
return 0;
感觉没啥问题啊?
后来我觉得是不是对返回引用理解错了,修改了一下程序:
const Caculate& operator*(const Caculate& lhs, const Caculate& rhs)
{
Caculate result(lhs.denominator * rhs.denominator,lhs.numerator * rhs.numerator);
Caculate &ref = result;
return ref;
}
这下总该是返回引用了吧?结果还是能正确执行,真心求教,我的有些基本概念不扎实。
[解决办法]
也就是因为出于具体的系统实现,返回局部变量引用很多时候都能够成功,所以前人才告诫一定不要这样做,否则如果每次尝试都必错,恐怕连傻子也不需要被告诫