C++ 11で導入されたrvalue参照と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))
すべてがうまくいくように見えます。 しかし、それらの違いは何ですか?どのシナリオでは、私は他のシナリオに対してそれらの1つを使うべきですか?
また、 'f'をキュー' push(std :: forward(f)) 'に転送することもできます。 –