使用字符串作为函数模板的实参

来源:互联网 发布:索尼降噪豆测评 知乎 编辑:程序博客网 时间:2024/06/02 13:08

     有时,把字符串传递给函数模板的引用参数会导致出人意料的运行结果,如:

   template <typename T>
inline T const& max(T const& a,T const& b)
{
 return a < b ? a : b;
}

 

max("apple","peach");   // ok:相同类型的实参

max("apple","banana");  //error:不同类型的实参

 

问题在于:由于长度的区别,这些字符串属于不同的数组类型。也就是说,apple和peach具有相同的类型 char const[6],然而banana的类型是char const[7]。因此只有第一个调用是合法的。因为该max()模板期望的是类型完全相同的参数。然而,如果声明的是非引用参数,你就可以使用长度不同的字符串来作为max()的参数了。

 

产生这种结果的原因是:对于非引用的参数,在实参演绎的过程中,会出现数组到指针(array-to-pointer)的类型转换。

原创粉丝点击