簡體   English   中英

rvalue引用綁定到std :: function類型的左值

[英]rvalue reference binding to an lvalue for std::function types

為什么在下面的代碼中(@)沒有編譯錯誤? 我認為lamb是一個左值,所以它不會被綁定到右值引用。

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() 臨時綁定到右值參考。

您的代碼等同於:

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

如果您這樣做,您將收到編譯錯誤:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM