lambda可以返回对捕获的引用吗?

时间:2017-10-05 06:22:53

标签: c++ lambda return-value

由于某些未定义的行为,我的程序崩溃了。我相信我已经将其缩小到以下代码(但这很难说,因为当我尝试创建一个最小的崩溃示例时,它实际上并没有崩溃,因为有时UB会发生这种情况)。

以下代码的行为是否未定义?

#include <functional>
using namespace std;

function<const function<void()> &()> defineFunction(function<void()> do_stuff) {
    return [do_stuff]() {
        return do_stuff;
    };
}

int main() {
    const function<void()> &do_stuff = defineFunction([]() {});
    do_stuff(); // undefined behavior?
}

我知道您无法返回对局部变量的引用,但是您可以返回对静态局部变量或全局变量的引用。这里,do_stuff是lambda闭包的一部分,所以我假设它的行为就像一个const静态变量,用于返回对它的引用。这似乎不是这种情况,因为在包含此类代码的较大程序中,对do_stuff的调用失败。

0 个答案:

没有答案