看一个例子
#include<string>
template <typename T>
inline T const &
max(T const& a, T const & b)
{ return a<b?b:a;}
对该函数做如下调用
int main()
{
std:: string s;
::max("apple","peach");
::max("apple","tomato");
::max("apple",s);
}
实际上第二次对max的调用会出错,原因在于第一个参数的类型是 char const[6] 而第二个参数类型是char const[7]
函数调用时,传入函数的数组名一般会被转化为指针,但是当参数为引用时,该转化无效,所以如果将max函数声明为:
inline T const & max(T a, T b)
{
return a<b?b:a;
}
则第二次调用就可以通过
第三次调用总是不能通过。