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 [¶meter]() // 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()
代码没问题。
standard 5.1.2 6说的是有一个lambda表达式没有捕获到对应的函数指针类型的转换函数。带捕获的 lambda 怎么样?以下代码编译时没有警告。这会导致未定义的行为吗?
std::function<void()> makeFucntion(int& parameter)
{
return [¶meter]() // 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()
代码没问题。