簡體   English   中英

為什么除了在 Uref 實施例中對右值的引用之外,還允許 std::move 接受對右值的引用?

[英]Why was it nessesury to allow std::move accept reference to rvalue besides reference to rvalue in Uref embodiment for both?

考慮到右值和左值不是對象的特征而是表達式的特征。

為什么std::move不是僅針對左值引用參數實現的,而是針對通用參數實現的? 而它僅對從左值檢索右值引用有用? 當 rvalue 已經是 rvalue 並且它不需要std::move功能。

template <typename T>
typename std::remove_reference_t<T>&& move(T&& x)
{
  return static_cast<std::remove_reference_t<T>&&>(x);
}

為什么 std::move 不是僅針對左值引用參數實現的,而是針對通用參數實現的?

因為對非常量的左值引用不能綁定到 xvalue。

當 rvalue 已經是 rvalue 並且它不需要 std::move 功能。

無論some_expression是右值表達式還是左值表達式,我們都希望std::move(some_expression)起作用。 這在模板中尤其重要,因為模板的細節可能取決於模板 arguments,我們不想為每個模板編寫單獨的特化。

與為什么允許這些基本相同的原因:

using T = const U;
const T var;

using S = T&;
S& ref = var;

在這種情況下,我們希望能夠聲明const T varS&類型是否已經是 const/reference。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM