r値が関数間で渡されたときに、C++の動作が不思議でした。この単純なコードで関数内のr値のパラメータ
ルック:私はfoo
機能を呼び出すためにmove
機能を使用する必要がbar
関数内だとき
#include <string>
void foo(std::string&& str) {
// Accept a rvalue of str
}
void bar(std::string&& str) {
// foo(str); // Does not compile. Compiler says cannot bind lvalue into rvalue.
foo(std::move(str)); // It feels like a re-casting into a r-value?
}
int main(int argc, char *argv[]) {
bar(std::string("c++_rvalue"));
return 0;
}
私が知っています。私の質問は今なぜですか?
Iが可変str
既にr値なければならないが、それはL値であるように、コンパイラが作用bar
関数内です。
誰かがこの動作についての標準への言及を引用できますか? ありがとう!
名前付きオブジェクトは常にlvalueです。そういうわけで、あなたは「動く」必要があります。 –