c++ - 从 C++ 中的函数返回值初始化引用时,调用堆栈的外观如何?
问题描述
当您使用函数返回值初始化引用时,调用堆栈的外观如何?
int i = 0;
int &j = i;
我知道 j 和 i 都指向同一个内存位置。
但是,当您使用函数返回值初始化引用时,例如,
int f();
const int &j = f();
j 引用的内存位置位于哪个堆栈帧上?为什么它必须是一个常量?
解决方案
j
在任何一种情况下都不是指针。引用是别名,而不是指针。
j
在第一种情况下是另一个名称i
。
在第二种情况下,假设 [c++17],重新int
使用不用于初始化值的纯右值(如 )会导致临时实现。如果此临时对象直接绑定到引用(在大多数情况下),则临时对象的生命周期将延长到引用的生命周期。
临时对象可以绑定到 const 的左值引用(即int const&
)或右值引用(即int&&
)。
推荐阅读
- python - 椭圆内大约 4 个圆圈以获得半径
- odoo - 我的学生如何访问我们的电子学习 odoo 课程
- php - 无法将 laravel 7 升级到 laravel 8
- android - 如何使用导航组件库从底部导航更改片段上的工具栏图标?
- firebase - 以编程方式检查 Firebase 电话身份验证限制?
- docker-compose - 如何在没有阻止终端的情况下运行命令
- reactjs - 我们如何实现 Open with Postman 按钮来打开从第三方 React 应用程序发送的邮递员收藏链接?
- amazon-web-services - 在coginto用户池中为用户组添加服装角色
- java - 用户第二次打开片段或活动时如何停止重新加载数据?
- c# - Azure 函数文件上传和读取内容