c++ - 通过引用传递对 lambda 的引用

标签 c++ lambda 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&,但它真的一样吗?

最佳答案

Is there any difference between f1 and f2?

是的。

but is it realy the same?

没有。 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

关于c++ - 通过引用传递对 lambda 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244833/

相关文章:

c++ - C/C++ 多线程开源软件

c++ - 更改字体颜色时发生 SFML 访问冲突

c - 如何修复 swapBack 函数以获得我想要的结果?

c++ - 不同指针类型之间的无效比较 : 'type*' and 'type&(*)()'

c++ - AIX 库调用以获取线程信息/状态

c++ - 读取 UART 流 - 数据分块

c# - Linq查询汇总金额列

c++ - 在多线程应用程序中使用智能指针

java - 拆分流并从文本文件放入列表

c++ - C++ 中的引用计数