c++ - 为什么返回具有引用类型的局部变量在 VS2012 中有效
问题描述
我对在 VS2012 Update 5 中工作但在 g++ 8.1 中失败的以下代码感到非常困惑。
int& func()
{
int i = 0;
return i;
}
int main()
{
int ri = func();
ri++;
std::cout << ri << std::endl; // output "1"
return 0;
}
根据我的理解并参考类似的问题C++ Returning reference to local variable,它应该失败,因为函数中局部变量的生命周期i
应该func
在函数调用之后结束。
但是,为什么它在 VS2012 中工作?
它让我无法入睡。
更新 v1:
添加 VS2012 指定版本并更改代码以使用变量ri
。
解决方案
这是未定义的行为,这可能会随机工作,因为堆栈帧不会被新值覆盖并且能够访问内存位置(其中包含垃圾)。我们永远不应该返回对局部变量的引用。
推荐阅读
- .htaccess - HTTPS SEO 和 Canonical
- javascript - 无法在 chart.js 时间轴上显示正确的时间
- mysql - 如何使用 ReactPHP 监控 Mysql 表的变化
- c# - 如何将网络接口添加到组合框并根据选定的接口解析 ip?
- c# - 如何从另一个应用程序向机器人发送消息
- php - 使用 PHP MVC 将 JQuery 添加到我的脚本标签时如何修复无限循环
- html - 如何创建一个水平滚动容器时将固定的 div,而不会垂直溢出容器?
- java - 提示用户从数组中选择元素以获取用户信息
- java - JPA 通用存储库,不适用于某个名称
- java - 为 JVM 事件启用跟踪/调试