r值引用是对原始对象的引用,因此将其转换为l值引用将仅引用原始对象。
一旦移动构造函数在引用上被调用,原始对象应该被重置为原始状态,对其的引用也是如此。
此示例可能澄清:
#include <iostream>
using namespace std;
int main()
{
string s = "my string";
string &&rval = move(s);
cout << '"' << rval << '"' << endl; // "my string"
cout << '"' << rval << '"' << endl; // "my string"
cout << '"' << s << '"' << endl; // "my string"
string &lval = rval;
cout << '"' << lval << '"' << endl; // "my string"
string s2(move(rval));
cout << '"' << rval << '"' << endl; // ""
cout << '"' << lval << '"' << endl; // ""
cout << '"' << s << '"' << endl; // ""
cout << '"' << s2 << '"' << endl; // "my string"
return 0;
}
在'串&& s''s'是可结合到一个左值参考左值。 – nwp
我以为''s'''是一个右值引用。为什么是左值?这是因为它有身份而且是可移动的?如果是这样,他们之间有什么区别?谢谢! –
请记住,如果一个对象有一个名称,它是一个左值 – NathanOliver