为什么将捕获的 lambda 分配给 std::function 会导致更多副本[重复]

问题描述 投票:0回答:0

在下面的代码中,分配给 std 函数比分配给自动变量导致更多的复制构造函数调用。 (实际上是初始化,而不是分配;))

我知道必须复制本地捕获的值。

我知道每次我将它分配给一个新的 std::function 都需要一个额外的副本。

但是为什么初始化自动变量和函数变量之间存在差异?

#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;
}
c++ lambda copy-constructor std-function
© www.soinside.com 2019 - 2024. All rights reserved.