gpt4 book ai didi

c++ - 通用 Lambda

转载 作者:行者123 更新时间:2023-12-01 14:35:46 27 4
gpt4 key购买 nike

这行代码(代码1)有什么区别

auto l1 = [](auto a) { static int l = 0; std::cout << a << " " << ++l << std::endl; };

这一行(代码2)

static int l = 0;
auto l1 = [](auto a) { std::cout << a << " " << ++l << std::endl; };

还有这个? (代码 3)

int l = 0;
auto l1 = [l](auto a) mutable { std::cout << a << " " << ++l << std::endl; };

主要

l1("Joe");
l1("Joo");
l1(1.5);

有时 int 变量“l”在调用之间共享,有时则不然。对 lambda 的参数之一使用 auto,它会创建 lambda 的多个实例吗?我不完全确定(代码 1)与(代码 2)有何不同以及(代码 2)与(代码 3)有何不同。我期望(代码 3)创建 lambda 的多个实例,因此输出将是(Joe 1、Joe 2、1.5 1)但结果是(Joe 1、Joe 2、1.5 3)。

最佳答案

Having auto for one of the lambda's parameter, does it create multiple instances of the lambdas?

它不会创建 lambda 的多个实例,但 lambda 会有一个模板化的 operator(),以及具有不同类型的多个实例。

对于第一种情况,当使用 const char* 调用两次时,相同的 static 变量 l(在 的实例化中定义>operator() for type const char*) 被打印出来。当使用 double 调用时,static 变量 l(在 operator() 的实例化中为类型 定义>double) 被打印出来,所以你会得到

Joe 1
Joo 2
1.5 1

对于第二种情况,它们都引用从 lambda 定义的同一个变量 l,然后你会得到

Joe 1
Joo 2
1.5 3

对于第三种情况,它们都引用 lambda 捕获的同一个变量 l,(甚至 operator() 的不同实例被调用,)那么你会得到

Joe 1
Joo 2
1.5 3

关于c++ - 通用 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63258028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com