首先我們來看一個函數模板的代碼:
template<typename T>
void func(T& param){
}
這裏模板函數參數接收一個引用,但是卻不能這樣調用:
func(27);
//error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
這裏參數只能接受一個“左值”(在C++11中可以取址的、有名字的就是左值,反之,不能取地址的、沒有名字的就是右值),而27是一個右值。
這時候萬能引用就要上場了~
再來看這個代碼
template<typename T>
void func(T&& param){
}
再調用func
func(27)
正確,萬能引用可以傳入一個右值,不過傳進來後類型也就成了int而不是引用。