当我学习了更多关于在C++ 11中引入的右值引用和std :: move时,我发现自己变得更加困惑。在这种情况下std :: move和std :: ref的区别
请看下面的例子:
我有排队的函数对象函数模板:
template<typename F, typename... Args>
void push(F && f, Args&&... args){
std::function<int(int)> func = f;
//Here function_queue is a object of queue<std::function<int(int)>>
function_queue.push(std::move(f));
}
我有这个功能
int foo(int i){return i;}
我可以调用推送三种方式:
1. push(foo)
2. push(std::move(foo))
3. push(std::ref(foo))
看起来他们都很好。 但他们之间有什么区别。在哪种情况下,我应该使用其中的一种。
您也可以将'f'转发到队列'push(std :: forward(f))' –