理解右值引用變數
在C 中,右值引用是一種特殊類型的引用,只能綁定到右值(沒有名稱的值) )。然而,當函數同時使用左值引用和右值引用重載時,會出現令人驚訝的行為。
混亂:右值引用變數的行為類似左值
考慮以下函數重載:
void f(T&&); // Overload #1 (rvalue reference) void f(T&); // Overload #2 (lvalue reference)
在另一個函數內函數:
void g(T&& t) { f(t); // Calls Overload #2 (lvalue reference) }
令人驚訝的結果是呼叫了Overload #2(左值引用),即使參數 t是右值引用。
原因:右值引用是具有特殊類型的左值
右值引用被視為左值,因為它們有名稱並且可以使用作為大多數用途的左值。但是,它們的類型(右值引用)指定了它們有限的綁定功能。
如何呼叫右邊值引用重載
要呼叫右邊值引用重載,參數必須是使用 static_cast運算子明確轉換為右值參考:
f(static_cast<T&&>(t));
其他規則管理右值引用
以上是為什麼右值引用有時在 C 函數重載中表現得像左值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!