[我发现lvalue
lambda闭包始终可以作为rvalue
函数参数传递。
请参见下面的简单演示。
#include <iostream>
#include <functional>
using namespace std;
void foo(std::function<void()>&& t)
{
}
int main()
{
// Case 1: passing a `lvalue` closure
auto fn1 = []{};
foo(fn1); // works
// Case 2: passing a `lvalue` function object
std::function<void()> fn2 = []{};
foo(fn2); // compile error
return 0;
}
案例2是标准行为(出于演示目的,我仅使用了std::function
,但是其他类型的行为都相同)。
案例1如何以及为什么起作用?函数返回后fn1
关闭的状态是什么?
λ不是std::function
。引用不绑定直接
案例1如何以及为什么起作用?
函数返回后fn1关闭的状态是什么?