由于某些未定义的行为,我的程序崩溃了。我相信我已经将其缩小到以下代码(但这很难说,因为当我尝试创建一个最小的崩溃示例时,它实际上并没有崩溃,因为有时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
的调用失败。