首页 > 解决方案 > 从 C++ 中的函数返回值初始化引用时,调用堆栈的外观如何?

问题描述

当您使用函数返回值初始化引用时,调用堆栈的外观如何?

int i = 0;
int &j = i;

我知道 j 和 i 都指向同一个内存位置。

但是,当您使用函数返回值初始化引用时,例如,

int f();
const int &j = f();

j 引用的内存位置位于哪个堆栈帧上?为什么它必须是一个常量?

标签: c++c++11abi

解决方案


j在任何一种情况下都不是指针。引用是别名,而不是指针。

j在第一种情况下是另一个名称i

在第二种情况下,假设 [c++17],重新int使用不用于初始化值的纯右值(如 )会导致临时实现。如果此临时对象直接绑定到引用(在大多数情况下),则临时对象的生命周期将延长到引用的生命周期。

临时对象可以绑定到 const 的左值引用(即int const&)或右值引用(即int&&)。


推荐阅读