我读了有效的c ++.他们给出了一个例子如下:
class Rational{
public : Rational (int num=0, int deno=1);
private : int n,d;
friend Rational operator*(const Rational &lhs, const Rational &rhs);
}
Rational& operator*(const Rational& lhs, const Rational& rhs)
{
static Rational result;
result = f(lhs.n*rhs.n, lhs.d*rhs.d) //some function f which multiply num
//and denom which returns Rational type
return result;
}
bool operator==(const Rational& lhs, const Rational& rhs);
int main()
{
Rational a,b,c,d;
.....
if((a*b)==(c*d)){
....
}
else {
.....
}
}
Run Code Online (Sandbox Code Playgroud)
为什么compariosion(a*b)==(c*d)总是评估为真?
==运算符将被评估为(运算符==(运算符*(a,b),运算符*(c,d)))有效C++说 - 运算符==将被要求比较静态Rational对象的值inside operator*,其中包含*运算符内的静态Rational对象的值.为什么这些静态值总是相等?
此比较中的两个表达式都((a*b)==(c*d))返回对同一对象的引用 - static Rational result从内部operator*.它具有静态存储持续时间,它从执行流程第一次到达它的那一刻开始,直到程序退出(换句话说,它在调用之间持续存在operator*).
除非operator==做一些奇怪的事情,否则一个对象应该与自己相等,结果总是如此.