首頁 > 後端開發 > C++ > 為什麼右值引用有時在 C 函數重載中表現得像左值?

為什麼右值引用有時在 C 函數重載中表現得像左值?

Patricia Arquette
發布: 2024-11-29 22:50:11
原創
301 人瀏覽過

Why Does an Rvalue Reference Sometimes Act Like an Lvalue in C   Function Overloading?

理解右值引用變數

在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&amp;&amp;>(t));
登入後複製

其他規則管理右值引用

  • T&& 可以在範本上下文中充當轉寄引用。
  • T&& 可以綁定到右邊值或右值的引用(X const&&)。
  • 右值引用具有靜態和動態綁定屬性。
  • 當右邊值引用直接綁定到臨時值時,會發生引用生命週期延長,從而延長其生命週期,直到引用的生命週期到期。

以上是為什麼右值引用有時在 C 函數重載中表現得像左值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板