【发布时间】:2012-12-20 20:58:19
【问题描述】:
可能重复:
Returning the address of local or temporary variable
Can a local variable’s memory be accessed outside its scope?
即使知道以下片段会发生什么,也有助于了解它是如何发生的。接下来是四个问题。
给定:
int& foo()
{
int i = 1;
return i;
}
并且知道在下面对 local i 的引用被取消引用到分配给 intVal 的 temp 并且 local i 在末尾消失foo()
int intVal = foo();
第一个问题 - 在下面,表达式的右侧与上面相同,所以这是编译器看到左侧并且根据上下文知道不取消引用返回的引用的情况,而是用它来创建一个新的引用?
第二个问题 - 仅此一项就使得 local i 在 intRef 处于范围内时仍然存在?
int& intRef = foo();
第三个问题 - intPtr 得到 local i 的地址。那么,编译器是否使用赋值的上下文并决定在获取引用地址之前不取消引用来获取值(而不是说获取包含取消引用值的临时地址)?
第四个问题 - local i 在 intPtr 在范围内时是否仍然存在?
int* intPtr = &foo();
【问题讨论】:
-
知道这里发生了什么毫无意义。 FWIW,它从不停留,并且在第一个中它停留的时间不够长,无法发生任何事情。
-
由于完全重复而关闭?我主要关心的是问题 1 和 3,它们涉及 LHS 的上下文,以确定如何处理 RHS(取消引用与否)。 “完全重复”甚至都没有涉及到这个问题。