可能是重复问题:
返回本地或临时变量的地址
在其范围之外访问局部变量的内存是否可行?
即使知道以下代码片段的结果,了解它是如何发生的也会很有帮助。接下来有四个问题。
给定:
int& foo()
{
int i = 1;
return i;
}
了解以下内容:对名为 i 的本地变量的引用被取消引用,转换为一个临时变量,该临时变量被分配给intVal,在foo()结束时,本地变量 i 消失。
int intVal = foo();
第一个问题 - 在下面的表达式中,右侧与上方相同,因此编译器是否看到左侧,并根据上下文知道不要对返回的引用取消引用,而是创建一个新的引用并将其初始化?
第二个问题 - 仅这个条件就使得本地变量 i 在 intRef 作用域内存在吗?
int& intRef = foo();
第三个问题 - 下面的 intPtr 获取了 本地 i 的地址。那么,编译器是否使用赋值的上下文,并决定在获取引用的地址之前不对其进行解引用以获取值(而不是说获取包含已解引用值的临时变量的地址)?
第四个问题 - 当 intPtr 在作用域内时,本地 i 是否仍然存在?
int* intPtr = &foo();