返回左值引用会导致关闭?

时间:2019-01-13 05:08:30

标签: c++11

我正在学习左值/右值,并且有一个关于左值的示例:

int& foo();
foo() = 42; // ok, foo() is an lvalue

通常,人们会让foo()在其体内返回全局变量或静态变量,但是如果我们在foo的体内定义局部变量,它也可以工作(警告:对与local关联的堆栈内存的引用变量'i'返回[-Wreturn-stack-address] ):

#include <iostream>
using namespace std;

int &foo(){int i=7; return i;};

int main() {

    foo() = 42;
    return 0;
}

为什么C ++允许这样做,它是闭包吗?

1 个答案:

答案 0 :(得分:2)

此程序表现出未定义的行为,方法是在其生命周期结束后访问对象。

返回对局部变量的引用没有意义-调用者对此类引用的任何使用都是未定义的,因为该时刻必定会销毁该局部变量。