1.按值传递
template<typename T>void func(T t){
}
当调用std::string s("moban");func(s);s是一个左值引用但是模板函数是按值传递,所以std::string& 退化为std::string,同样的按值传递时const & &&全部被去掉 按值传递的缺点是你无法区分传入的参数类型
2.按引用传递
template<typename T>void func(const T&t){
}
如果调用如下 const int a = 5;func(a);T的类型int t的类型为const int&
3.传递非const参数
template<typename T>void func(T&t){
}
当调用func(std::string("l"));//error
但是const std::string s = "canshu";func(s);//ok!
4.关于万能转发
template<typename T>void func(T&&t){
T a;
}
如果如下调用int a=5;func(a);根据引用折叠规则T的类型T&
5.使用std::ref和std::cref