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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-08 13:17:11150瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn