[英]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.