【发布时间】:2023-04-02 00:07:01
【问题描述】:
这行代码(代码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)。
【问题讨论】:
标签: c++ lambda c++14 auto generic-lambda