首頁 > 後端開發 > C++ > 為什麼在向其傳遞右值引用時不呼叫'f(T&&)”?

為什麼在向其傳遞右值引用時不呼叫'f(T&&)”?

Mary-Kate Olsen
發布: 2024-12-08 13:17:11
原創
165 人瀏覽過

Why Doesn't `f(T&&)` Get Called When Passing an Rvalue Reference to It?

為什麼右邊值引用變數不是右邊值引用

考慮函數f:

void f(T&&&); // #1
void f(T&);  // #2
登入後複製

的兩個重載另一個函數g:

void g(T&& t) 
{ 
  f(t);  // calls #2
}
登入後複製

為什麼會重載儘管參數 t是右邊值,f(T&) 仍會被呼叫?

右邊值所引用的本質

右值引用是只能綁定到右邊值的變數(沒有右邊值的物件)名稱)。 T&&t 有一個名稱,使其成為左值。

型別與值的差別

T&& 是型別右值參考。右值引用只能綁定到右值,但它是引用類型的左值。

特殊情況

  • static_cast(t):這明確地創建了一個右值引用,從而可以調用f(T&&).

管理右值引用的規則

  • 從函數傳回命名值或值沒有名稱時會發生隱式移動。
  • 右值引用或 const& 只能綁定到右值。
  • 引用生命週期擴充適用於綁定到建構子外部引用的臨時變數。
  • 在某些上下文中,如果 T 是 X& 或 X const&,則 T&& 折疊為 X& 或 X const&。
  • T&&可以作為類型推導中的「轉發參考」。

以上是為什麼在向其傳遞右值引用時不呼叫'f(T&&)”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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