C++日記——Day59:萬能引用

template<typename T>
void func(T&& tmpv){
    cout << tmpv << endl;
    return;
}

萬能引用:既能接受右值,又能接受左值

滿足以下條件,右值引用會變爲萬能引用:

a、必須是函數模板

b、必須是發生了模板類型推斷並且函數模板形參的樣子是:T&&;auto也存在萬能引用,以後再說。

T&& 就是萬能引用, 單獨的T不是萬能引用

 

萬能引用 和 右值引用 的區別:

1、右值引用得傳遞右值,否則編譯器報錯;

2、萬能引用做函數形參時,既可以給他傳遞右值,又可以給它傳遞左值。

        如果我們傳遞進去了右值,那麼這個萬能引用就變成了了右值引用。

        如果我們傳遞進去了左值,那麼這個萬能引用就變成了了左值引用。

 

template <typename T>
void func(vector<T>&& tmpv){   //此處是右值引用

}

只有T後直接加 && 纔是萬能引用

萬能引用的剝奪:

1、const修飾符會剝奪一個引用稱爲萬能引用的資格。

template<typename T>
void func(const T&& tmpv){  //此處 T&&不再是萬能引用
    cout << tmpv << endl;
    return;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章