函数,该函数返回对局部对象的引用

Function which returns a reference to local object

本文关键字:函数 对象 引用 局部 返回      更新时间:2023-10-16

我写了一个函数,它返回一个本地对象的引用。

Fraction& operator*(Fraction& lhs, Fraction& rhs)
{
    Fraction res(lhs.num*rhs.num,lhs.den*rhs.den);
    return res;
}

函数返回后,res对象将被销毁,接收对象将指向Ex-Fraction对象,导致使用它时未定义的行为。任何想要使用这个功能的人都将面临问题。

为什么编译器不能检测到这种情况作为编译时错误?

当您这样做时,大多数编译器将显示警告。您应该始终使用一个选项打开警告,例如GCC的-Wall .

至于为什么标准不要求错误,这是因为具有流控制的函数将很难判断返回值是否引用了局部值。(并且只有当调用者使用返回值时才会发生未定义行为)