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