[英]Why does std::move take rvalue reference as argument?
根據cppreference.com , move
有簽名
template< class T >
typename std::remove_reference<T>::type&& move( T&& t ) noexcept;
為什么它需要一個右值參考T&& t
作為它的arugment?
當我嘗試以下代碼時
void foo(int&& bar) {
cout << "baz" << endl;
}
int main(){
int a;
foo(a);
}
我從編譯器得到一個錯誤“rvalue引用不能綁定到左值”
到底是怎么回事? 我很困惑。
它不是右值引用,而是轉發引用 ; 這可以保留參數的值類別。 這意味着std::move
可以同時使用左值和右值,並無條件地將它們轉換為rvalue。
轉發引用是一種特殊的引用,它保留了函數參數的值類別,從而可以通過std :: forward轉發它。 轉發參考是:
1)函數模板的函數參數,聲明為對同一函數模板的cv-unqualified type模板參數的rvalue引用:
2)auto &&除了從括號括起的初始化列表中推斷出來之外。
另一方面, int&&
是一個右值引用; 注意這里的區別,如果函數模板參數具有帶模板參數T
類型T&&
,即推導類型T
,則該參數是轉發引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.