使用 gcc 4.7.2 或 4.8.1 编译并运行以下程序时
#include <stdio.h>
#include <functional>
class A
{
public:
A()
{
}
A(const A& a)
{
printf("Copy ctor\n");
}
A(A&& a)
{
printf("Move ctor\n");
}
};
int main()
{
A a;
auto func = [a] {
};
auto newfunc = std::move(func);
return 0;
}
将给出输出:
Copy ctor
Move ctor
这似乎是完全正常的。
但是,当A a;
更改为时const A a;
,输出如下:
Copy ctor
Copy ctor
为什么原始变量是否为 const 会影响 lambda 的移动?
FWIW,MSVC2012 总是制作两个副本。