64,651
社区成员
发帖
与我相关
我的任务
分享
//比如
template<typename T>
void tFunc (T param)
{
...
}
int x = 5 ;
const int &crX = 5 ;
tFunc (crx) ;//应该是tFunc<int> (int)而不是tFunc<const int> (const int)吧
int x = 5 ;
const int *pX = &x ;
const int *const cpX = &x ;
tFunc (pX) ; //调用tFunc<const int *> (const int *)
tFunc (cpX) ; //调用tFunc<const int *> (const int *)
int x = 5 ;
const int *pX = &x ;
tFunc (pX) ; //调用tFunc<const int *> (const int *)
//没有指定T时候,编译器会根据实参来推导T的类型
//T被推导成实参的类型,不包含cv属性
template <class T>
void func1 (T t) {}
//T &被推导成实参的左值引用类型,和实参的cv属性一致
template <class T>
void func2 (T &t) {}
//T &&被推导成实参的引用类型,和实参的cv属性和引用属性一致
template <class T>
void func3 (T &&t) {}
//编译器无法自动推导T的类型
template <class T>
void func4 (typename std::remove_cv<T>::type t) {}