Fraction& operator*(Fraction& lhs,Fraction& rhs) { Fraction res(lhs.num*rhs.num,lhs.den*rhs.den); return res; }
在函数返回后,res对象将被销毁,并且接收对象将指向Ex-Fraction对象,导致使用它时的未定义行为.任何要使用此功能的人都将面临问题.
为什么编译器无法将这种情况检测为编译时错误?
至于为什么标准不要求错误,这是因为具有流量控制的功能将使得难以判断返回值是否引用本地或不是本地的. (仅当调用者使用返回值时,才会发生未定义的行为.)