考虑一下:
#include <functional>
#include <iostream>
std::function<void()> make_function(int& x) {
    return [&]{ std::cout << x << std::endl; };
}
int main() {
    int i = 3;
    auto f = make_function(i);
    i = 5;
    f();
}
是否保证在5不调用未定义行为的情况下输出该程序?
我理解如果我x通过value([=])捕获它是如何工作的,但我不确定我是否通过引用捕获它来调用未定义的行为.可能是我在make_function返回后最终会有一个悬空引用,或者只要原始引用的对象仍然存在,捕获的引用是否可以保证工作?
在这里寻找明确的基于标准的答案:) 到目前为止它在实践中运作良好;)