为什么我可以 return local int& 并获得一定的价值而不是垃圾? C++

Why can I return local int& and get certain value instead of trash? C++

我想知道当你 return int& 时会发生什么。让我们跳到这个例子。 我有一个简单的 class Foobar 存储一个整数。 让我们看看这个函数:

Foobar showObjectsValue() {
    Foobar b(50);
    return b;
}

它 return 是一个本地对象的副本,所以当我调用这个函数时,我实际上得到了一些数据而不是一些垃圾。但是当我做这样的事情时:

Foobar& showObjectsValue() {
    Foobar b(50);
    return b;
}

它 return 是垃圾,因为在我们退出 "showObjectsValue()" 对象的作用域后 "b" 从内存堆栈中弹出并且我们 return 引用这个弹出的对象(如果我错了请纠正我)。但是我不知道在 returning int 而不是 object 的情况下会发生什么。

这个函数:

int& showIntegerValue() {
    int i = 50;
    return i;
}

和这个函数:

int showIntegerValue() {
    int i = 50;
    return i;
}

return 相同的值,都给我 int = 50。那么有人可以解释在 return 引用本地整数和本地对象的情况下实际发生了什么吗?

So can someone explain what actually is going on in case of returning reference to local integer and local object?

整数对象。尝试访问已销毁对象的别名是未定义的行为。不要对它抱有任何期望。你的编译器甚至应该给你一个警告:

main.cpp:4:9: warning: reference to local variable 'i' returned [-Wreturn-local-addr]
     int i = 50;

最后,当你处理未定义的行为时,仅仅因为你看到某些东西并不意味着它是预期的。为了进一步证明这一点,尝试使用 GCC 运行 这段代码会导致上面的警告和分段错误。