Return 从 c++11 中的函数捕获的 lambda

Return lambda with capture from a function in c++11

standard 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();

如果存在未定义的行为,是否有另一种方法可以 return 从 c++11 中的函数捕获的 lambda 表达式?

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

如果您尝试 return 一个函数指针 void(*)() 那么代码将无法编译,因为带有捕获的 lambda 没有转换为函数指针。

由于 parameter 被引用传递和捕获,并且 var 仍在范围内,而您调用 foo() 代码没问题。