右辺値の参照について、私がよく理解していないことがあると思います。以下がエラーでコンパイルに失敗するのはなぜですか(VS2012)'foo' : cannot convert parameter 1 from 'int' to 'int &&'
?
void foo(int &&) {}
void bar(int &&x) { foo(x); };
int &&
barからfooに渡されたときに型が保持されると思いました。int
関数本体の中で一度変換されるのはなぜですか?
私は答えが使用することであることを知っていますstd::forward
:
void bar(int &&x) { foo(std::forward<int>(x)); }
だから多分私は理由を明確に把握していないだけです。(また、なぜstd::move
ですか?)