1. 程式人生 > >C++11中的“萬能引用”

C++11中的“萬能引用”

首先我們來看一個函式模板的程式碼:

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而不是引用。