在我看來,能夠將r值引用轉換爲l值引用使得最終能夠以臨時值的形式訪問臨時值是沒有意義的。例如:從r值ref轉換爲l值ref,爲什麼它有效?
struct S
{
int val=5;
};
void foo(S &&s)
{
S &s2=s;
s2.val=7
}
void foo2(S &s2)
{
s2.val=7
}
int main()
{
foo(S()); // This is fine
foo2(S()); // Error: Even though this is logically equivalent to foo()
}
到foo()
呼叫似乎是有效的在C++或至少它用gcc 4.7.1編譯。對foo2()
的呼叫不是,即使這兩個功能似乎在邏輯上相同。是什麼賦予了?
你沒有轉換任何東西。你將表達式's'的值綁定到引用變量's2'。沒有錯。 –
[閱讀所有關於它](http://stackoverflow.com/a/5591006/2089675) – smac89
你可以直接在'foo()'內執行's.val = 7'。所以'&'和'&&'沒有真正的區別,它們都可以以相同的方式使用。事實上,(設計上)很難說出它們之間的區別。最重要的區別是,當&&'是一個函數參數類型的一部分時,它允許它綁定(作爲參考)臨時。 –