![](/img/trans.png)
[英]Why move return an rvalue reference parameter need to wrap it with 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 var
和S&
類型是否已經是 const/reference。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.