簡體   English   中英

通過引用將引用傳遞給lambda

[英]Passing a reference to lambda by reference

f1f2有什么區別?

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.

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