我试图了解c ++引用的工作方式,并尝试编写下一个代码:
#include <iostream>
int& func();
int main()
{
std::cout <<func()<< std::endl;
system("pause");
return 0;
}
int& func()
{
int x = 23;
return x;
}
据我所知,在函数结束后,将删除在函数中初始化的int x,然后函数返回的值将指向不存在的值。 但是当我打印时,控制台中显示23。 怎么可能?
答案 0 :(得分:-1)
该值被写入func()
内的存储器中,但是返回后,“不存在”是错误的。
为什么它不存在,还有其他东西会覆盖该内存吗?你不能确定。这是未定义的行为。
您只是从func()
返回了一个内存地址,返回后可用于其他变量。但是,如果该内存地址(现在可用)没有被覆盖,它将保留值23.。直到天数结束;)
这里@George对未定义行为的引用: https://en.cppreference.com/w/cpp/language/ub
此外,您的代码可能有一些错误...无论如何,请看一下它,它将解决您的后顾之忧 Can a local variable's memory be accessed outside its scope?