【发布时间】:2020-03-12 21:42:18
【问题描述】:
最近,我在阅读C++ Primer,它说:
当一个函数完成时,它的存储空间被释放。一个函数之后 终止,对本地对象的引用引用不再有效的内存
因此,我在 Visual Studio 2019 中键入以下代码:
int& returnRef()
{
int n = 2;
return n;
}
int main()
{
int ref = returnRef();
cout << ref;
}
我认为这应该是一个大小写错误,但它没有并在命令上打印了正确的值。我很困惑。有对此的解释吗?
我是 C++ 新手。
编辑:
谢谢伙计们/姑娘们。看起来这个问题与编译器有关。我明白了。
顺便说一句,我发布了另一个关于在 vs2019 中启用编译器警告的问题: How can I enable compiler warnings in Visual Studio 2019?
【问题讨论】:
-
我相信这并不能保证在每个平台上都有效(即,在每个编译器上产生相同的结果),并且在这种情况下,巧合的是,分配给局部变量的值仍然保留在内存中函数完成后。
-
行为未定义,无需诊断。但是,大多数编译器都可以配置为在这种情况下发出警告 - 检查 VS2019 文档以查看是否有。
-
在编写另一行 C++ 之前阅读this。
-
你说的“我认为它应该大小写错误”是什么意思?您的意思是您希望编译器发出错误消息或程序会出现运行时错误?
标签: c++