簡體   English   中英

為什么std :: move將rvalue引用作為參數?

[英]Why does std::move take rvalue reference as argument?

根據cppreference.commove有簽名

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.

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