右值引用何時會表現得像函數中的左值?
在下面的程式碼片段中,函數 foo 接收到一個右邊值引用名為 bar 的參數。
void foo(string&&& bar) { string* temp = &bar; cout << *temp << " @:" << temp << endl; }
這段程式碼引發了一個問題:bar 是否被視為左值在函數內,由於可以取得位址?
bar 是右邊值還是左值?
這個問題本質上在問題本身中得到了答案。任何有名稱的東西都是左值。因此,bar 被視為左值。但是,需要注意的是,bar 的 類型 為「對字串的右值引用」。
要將 bar 視為右值,必須對其應用 std::move() .
為什麼要區分左值引用和右值引用?
這種區別變成在考慮什麼可以綁定到每個引用類型時很重要。左值可以綁定到左值引用,而右值可以綁定到右值引用(任何東西都可以綁定到 const 的左值引用)。
換句話說,右值不能綁定到左值引用,反之亦然。
右值引用類型的參數
處理右值的函數參數時引用類型,必須了解引用所指向的值的意義。右值引用表示分配給它的值是右值。因此,一旦表達式結束,其資源將被釋放,從而允許將其作為右值進行管理。
傳遞右值引用
進一步傳遞右值引用參數時,有兩個選項:
結論
左值引用和右值引用之間的區別不在於它們獲得後的行為,而在於可以綁定到它們的內容。這種理解對於有效處理和管理函數內的參考至關重要。
以上是右值引用何時在函數內像左值一樣起作用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!