c++ - C++ 返回局部变量的常引用 - SegmentFault 思否

PHOTO EMBED

Thu Nov 24 2022 05:14:59 GMT+0000 (Coordinated Universal Time)

Saved by @leawoliu

#include <iostream>
using namespace std;

int func()
{
    int a = 10;
    return a;
}

int main()
{
    int const& a = func();
    cout << a << endl;

    return 0;
}
content_copyCOPY

1,不考虑 copy ellison 的情况下,const int& a 指向的不是 func 里面的 a, 而是 func 里面a的拷贝(因为 func 返回值是int 而非 int&)。 2, local const & 会延长 func() 所产生的临时对象(pure rvalue)的生命周期,直至这个const & 生命周期结束。 所以不会有任何问题。 一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。 你可以采用VS或者IDA,windbg等工具进行反汇编调试,过程一清二楚。 上面这个就是直接把10赋值给了main中的a变量。

https://segmentfault.com/q/1010000005839794