从c++11中的函数返回带有捕获的lambda



标准5.1.2 6规定有一个从lambda表达式到相应函数指针类型的转换函数,没有捕获。带捕获功能的lambda呢?下面的代码编译时没有警告。这会导致未定义的行为吗?

std::function<void()> makeFucntion(int& parameter)
{
return [&parameter]() // convert the lambda to std::function
{
cout << parameter;
};
}
int var = 4;
auto foo = makeFucntion(var);
foo();

如果有未定义的行为,是否有另一种方法来返回一个lambda表达式从一个函数捕获在c++11?

std::function<void()>不是函数指针。std::function<void()>可以存储的不仅仅是函数指针。

如果你试图返回一个函数指针void(*)(),那么代码将无法编译,因为带有捕获的lambdas没有转换为函数指针。

由于parameter是通过引用传递和捕获的,当您调用foo()时,var仍在作用域中,因此代码很好。

最新更新