首頁 >後端開發 >C++ >C 中什麼時候可以將右值引用參數綁定到左值參數?

C 中什麼時候可以將右值引用參數綁定到左值參數?

Linda Hamilton
Linda Hamilton原創
2024-12-07 21:48:18885瀏覽

When Can an Rvalue Reference Parameter Bind to an Lvalue Argument in C  ?

為什麼右邊值引用參數可以綁定到左值參數

在 C 中,右值引用應該綁定到右邊值。然而,在某些情況下,右值引用參數可以匹配左值參數,這讓許多程式設計師感到驚訝。

考慮以下程式碼:

void f(T&&); // #1
void f(T&);  // #2

通常,我們預期 f(T&&)傳遞右邊值時呼叫重載,傳遞左值時呼叫 f(T&) 重載。但是,行為不同:

void g(T&& t) 
{ 
  f(t);  // calls #2
}

在此範例中,即使 t 是右值,也會呼叫 f(T&) 重載。發生這種情況是因為,儘管它是右值引用類型,t 仍然被視為左值。

基本原理:

右值通常是沒有名稱的實體或將失去名稱的實體名字很快。右值引用只能綁定到右值。但是,t 有名稱,而且它的生命週期不會立即過期。

T&& 型別:

T&& 是右邊值所引用的型別。雖然它只能綁定到右值,但它在其他方面表現為右值引用類型的左值。它的右值引用性質僅在其建構期間和執行 decltype(variable_name) 時才重要。

std::move() 的作用:

std::move( )透過執行傳回一個右邊值參考static_cast(t).

相關規則:

  • 從函數傳回命名值時,就會發生隱式移動到右值引用參數,或當值沒有名稱時。
  • 只有右邊值引用和 const& 可以綁定到右邊值。
  • 當直接綁定到構造函數外部的引用時,右值引用和 const& 會經歷生命週期擴展。
  • 如果T 的類型為X& 或X const&,則引用折疊會將T&& 轉換為X& 或X const& .
  • 在型別推導上下文中,T&& 將T 推導為X, X&, X const&,或X const&& 基於參數類型。

以上是C 中什麼時候可以將右值引用參數綁定到左值參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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