即使知道以下剪辑的结果会发生什么,也有助于了解它是如何发生的。接下来是四个问题。
鉴于:
int& foo()
{
int i = 1;
return i;
}
并且知道在下面对名为 i 的本地的引用被取消引用到分配给 intVal 的 temp 中,并且本地 i在foo()的末尾消失
int intVal = foo();
第一个问题 - 在下面,表达式的右侧与上面相同,所以这是编译器看到左侧并且根据上下文知道不取消引用返回的引用的情况,而是创建一个新的引用是用它初始化的吗?
第二个问题 - 仅这一点就让本地 i在 intRef 范围内时留下来?
int& intRef = foo();
第三个问题 - 波纹管intPtr获取本地 i的地址。那么,编译器是否使用赋值的上下文并决定在获取引用地址之前不取消引用来获取值(而不是说获取包含取消引用值的临时地址)?
第四个问题 -当intPtr在范围内时,本地 i是否会留下来?
int* intPtr = &foo();