Lambda闭包左值可以作为右值参考参数传递

问题描述 投票:1回答:3

[我发现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关闭的状态是什么?

c++ lambda closures c++14 rvalue-reference
3个回答
0
投票

λ不是std::function。引用不绑定直接


0
投票
案例1如何以及为什么起作用?

0
投票
函数返回后fn1关闭的状态是什么?
© www.soinside.com 2019 - 2024. All rights reserved.