返回对本地对象的引用的函数

时间:2013-06-11 14:16:34

标签: c++ c++11 reference

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

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

函数返回后,res对象将被销毁,接收对象将指向Ex-Fraction对象,导致使用它时出现未定义的行为。 任何打算使用此功能的人都会遇到问题。

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

1 个答案:

答案 0 :(得分:19)

大多数编译器会在您执行此操作时显示警告。您应该始终使用GCC -Wall等选项打开警告。

至于为什么标准不需要错误,这是因为具有流控制的函数将使得很难判断返回值是否引用了本地。 (并且只有在调用者使用返回值时才会出现未定义的行为。)