提问人:Gonen I 提问时间:3/2/2023 最后编辑:Gonen I 更新时间:3/3/2023 访问量:195
为什么将捕获 lambda 分配给 std::function 会导致更多副本 [duplicate]
Why does assigning a capturing lambda to std::function result in more copies [duplicate]
问:
这个问题在这里已经有答案了:
C++ lambda 两个复制构造函数调用 (1 个答案)
使用 lambda 创建 std::function 会导致 lambda 对象的多余复制 - 为什么? (3 个答案)
9个月前关闭。
社区在 9 个月前审查了是否重新讨论这个问题,并将其关闭:
原始关闭原因未解决
在下面的代码中,分配给 std 函数会导致比分配给自动变量更多的复制构造函数调用。 (实际初始化,不分配;))
我得到必须复制本地捕获的值。
每次我将其分配给新的 std::function 时,我都会得到一个额外的副本。
但是为什么初始化 auto var 和函数 var 之间有区别呢?
#include <iostream>
#include <functional>
using namespace std;
struct A { A()=default; A(const A&) {cout << "CC\n";} };
int main()
{
A a1;
//auto f = [a1] (){}; // just 1 CC
//[a1] (){}; // just 1 CC
function<void()> f=[a1] (){}; // 2 CC
return 0;
}
答: 暂无答案
评论
auto