【发布时间】:2016-03-05 10:16:22
【问题描述】:
我有以下代码sn-p。
#include <iostream>
#include <functional>
using namespace std;
struct A
{
A() { cout << "A "; data = 1; }
A(const A& a) { cout << "cA "; data = a.data; }
~A() { cout << " dA"; }
int data;
};
void f(A& a, function<void(A)> f)
{
cout << "(";
f(a);
cout << ")";
}
int main()
{
A temp;
auto fun = [](A a) {cout << a.data;};
f(temp, fun);
}
输出是:
A (cA cA 1 dA dA) dA
为什么temp被复制了两次?
我正在使用 Visual C++ (vc140)。
【问题讨论】:
-
您缺少
function<>的声明,但我猜它正在那里发生。 -
@PaulEvans 它怎么不见了?
#include <functional>在那里,using namespace std;(虽然实践不佳)在那里。 -
@Angew 对不起-我的错。在错误的目录中构建:(
标签: c++ c++11 visual-c++ lambda copy-constructor