C ++参考错误

时间:2018-10-27 12:12:16

标签: c++ function reference

我试图了解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。 怎么可能?

1 个答案:

答案 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?