通过引用传递对lambda的引用

问题描述 投票:2回答:1

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&,但它是否真的相同?

c++ lambda reference
1个回答
6
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.