[英]Passing a reference to lambda by reference
f1
和f2
有什么區別?
void foo(const std::string& test){
auto f1 = [&test](){
std::cout << test << std::endl;
};
f1();
auto f2 = [test](){
std::cout << test << std::endl;
};
f2();
}
int main()
{
std::string x = "x";
foo(x);
}
在這兩種情況下,lambda內的test
變量的類型都將為std::string const&
,但這是否真的一樣?
f1和f2有什么區別?
是。
真的一樣嗎?
f2
號捕獲一個std::string const
。
lambda捕獲的類型推斷與auto
聲明的工作原理相同:
[&test](){} // a reference
[ test](){} // an object
auto &var = test; // a reference
auto var = test; // an object
std::string &var = test; // a reference
std::string var = test; // an object
template<class T> void foo1(T& var);
template<class T> void foo2(T var);
foo1(test); // a reference
foo2(test); // an object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.