可能重复:
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 search hit for move semantics 显示了类似的函数签名
int&& GetInt()
{
int x = 0;
// code here
return std::move(x);
}
从我在其他地方读到的 && 表示右值引用,因此在这种情况下,它返回对不存在的对象的引用。
那么它是哪一个?
(是的,我知道移动 int 没有真正的好处,但问题是是否在第一个函数中使用 std::string 或 std::string&& 的返回类型。如果这对所有类型都应该这样做。)