相关疑难解决方法(0)

在C++ 11 lambda中通过引用捕获引用

考虑一下:

#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();
}
Run Code Online (Sandbox Code Playgroud)

是否保证在5不调用未定义行为的情况下输出该程序?

我理解如果我x通过value([=])捕获它是如何工作的,但我不确定我是否通过引用捕获它来调用未定义的行为.可能是我在make_function返回后最终会有一个悬空引用,或者只要原始引用的对象仍然存在,捕获的引用是否可以保证工作?

在这里寻找明确的基于标准的答案:) 到目前为止它在实践中运作良好;)

c++ lambda language-lawyer c++11

59
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1

language-lawyer ×1