【发布时间】:2014-01-23 11:42:09
【问题描述】:
考虑这段代码:
void makeNew(std::function<void()>&& func)
{
std::function<void()> p = func;
}
void test(){}
用法:
makeNew(std::bind(test));
预期结果:
从std::bind(test) 的结果类型创建的临时std::function<void()> 对象
然后这个临时 std::function 对象作为右值引用传递给 makeNew,然后移动 std::function p = func 时调用的构造函数;被调用。
实际发生的情况(使用 VS2010 并使用调试器单步执行):
对于以下语句std::function<void()> p = func;,调用的是复制构造函数而不是移动构造函数。
有人可以解释这种行为吗?
【问题讨论】:
-
func我是一个左值。您可以使用 std::move 将其转换为可以移动的右值。
标签: c++ c++11 constructor