int x =27;
const int cx = x;
const int& rx = x;
const int* p = &x;
1.ParamType是个指针或引用,但不是个万能引用
template<class T>
void f(T& param);
f(x); //T型别是int, param的型别是int&
f(cx); //T型别是const int, param的型别是const int&
f(rx); //T型别是const int, param的型别是const int&
template<class T>
void f(const T& param);
f(x); //T型别是int, param的型别是const int&
f(cx); //T型别是int, param的型别是const int&
f(rx); //T型别是int, param的型别是const int&
template<class T>
void f(T* param);
f(&x); //T型别是int, param的型别是int*
f(px); //T型别是const int, param的型别是const int*
template<class T>
void f(const T* param);
f(&x); //T型别是int, param的型别是int*
f(px); //T型别是int, param的型别是const int*
2.ParamType是个万能引用
template<class T>
void f(T&& param);
f(x);//T型别是int&, param的型别是int&
f(cx);//T型别是const int&, param的型别是const int&
f(rx);//T型别是const int&, param的型别是const int&
f(27);//T型别是int, param的型别是int&&
3.ParamType既非指针也非引用
template<class T>
void f(T param); //按值传递
f(x);//T型别是int, param的型别是int
f(cx);//T型别是int, param的型别是int
f(rx);//T型别是int, param的型别是int
f(px);//T型别是const int*, param的型别是const int*
template<class T>
void f(const T param); //按值传递
f(x);//T型别是int, param的型别是const int
f(cx);//T型别是int, param的型别是const int
f(rx);//T型别是int, param的型别是const int
f(px);//T型别是const int*, param的型别是const int* const