重複の可能性:
C++11 の右辺値とムーブ セマンティクスの混乱
私が正しいと思うのは、
std::string GetLine()
{
std::string str;
std::getline(std::cin, str);
return std::move(str);
}
しかし、このリンクでhttp://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html (ヘッダー部分を確認してください Returning an explicit rvalue-reference from a関数)
これは、ムーブ セマンティクスの 1 位の Google 検索ヒットであり、次のような同様の関数シグネチャを示しています。
int&& GetInt()
{
int x = 0;
// code here
return std::move(x);
}
私が他の場所で読んだことから && は右辺値参照を意味するため、この場合、存在しないオブジェクトへの参照を返します。
それで、それはどれですか?
(はい、int を移動しても実際のメリットがないことはわかっていますが、問題は、最初の関数で std::string または std::string&& の戻り値の型を使用するかどうかです。それがすべての型に対して行われるべき方法である場合。)