我编写了一个返回对本地对象的引用的函数。
Fraction& operator*(Fraction& lhs, Fraction& rhs)
{
Fraction res(lhs.num*rhs.num,lhs.den*rhs.den);
return res;
}
函数返回后,res 对象将被销毁,接收对象将指向 Ex-Fraction 对象,导致使用它时出现未定义的行为。 任何要使用此功能的人都会遇到问题。
为什么编译器不能将这种情况检测为编译时错误?
最佳答案
大多数编译器会在您这样做时显示警告。您应该始终使用 GCC 的 -Wall
等选项打开警告。
至于为什么标准不要求报错,是因为有流控的函数会让人很难判断返回值是否引用了本地。 (只有当调用者使用返回值时才会发生未定义的行为。)
关于c++ - 返回对本地对象的引用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17046363/