當我學習了更多關於在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))' –