rvalue参考绑定到std ::功能类型的LVALUE



为什么(@)在以下代码中没有汇编错误?我以为lamb是一个LVALUE,因此它不会绑定到RVALUE参考。

using FunctionType = std::function<void()>;
using IntType = int;
struct Foo {
    void bar(FunctionType&&) {}
    void baz(IntType&&) {}
};
Foo foo;
foo.bar([]() {}); //OK
auto lamb = []() {};
foo.bar(lamb); //(@) No compilation error?!
foo.baz(5); //OK
int i = 5;
foo.baz(i); //Error

由于 lamb是lambda而不是 std::function,因此必须创建临时std::function并将其传递给bar()。临时与RVALUE参考结合。

您的代码等效于此:

auto lamb = [](){};
foo.bar(FunctionType(lamb));

,如果您这样做,您将遇到编译错误:

FunctionType func = [](){};
foo.bar(func);

最新更新