c++ - 返回对本地对象的引用的函数

标签 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 对象,导致使用它时出现未定义的行为。 任何要使用此功能的人都会遇到问题。

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

最佳答案

大多数编译器会在您这样做时显示警告。您应该始终使用 GCC 的 -Wall 等选项打开警告。

至于为什么标准不要求报错,是因为有流控的函数会让人很难判断返回值是否引用了本地。 (只有当调用者使用返回值时才会发生未定义的行为。)

关于c++ - 返回对本地对象的引用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17046363/

相关文章:

c++ - 段错误——怎么会!

c++ - std::packaged_task 是如何工作的

rust - 使用对另一个 HashMap 的引用克隆一个 HashMap

css - 在 CSS 中使用对象引用

c++ - 如何转义整个字符序列?

c++ - 调试堆栈损坏

c++ - 就地 std::copy_if

c++ - 在 C++ 线程之间共享数据容器的最佳方式是什么

reference - 如何为对结构的引用实现 Add 特性?

c++ - 在 C++ 中追加到 Char 数组的末尾