在下面的代码中,分配给 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;
}