使用字符串作为函数模板实参的问题??
#include<string>
template <typename T>
inline T const& max(T const& a, T const& b)
{
return a < b ? b : a;
}
int main()
{
std::string str;
::max("apple", "peach");
::max("apple", "tomato");
return 0;
}
上面的代码编译不通过;主要是::max("apple", "tomato");这里;
但是当把max函数变为:
template <typename T>
inline T max(T a, T b)
{
return a < b ? b : a;
}
就可以编译运行了;
这两种表示有什么不同吗??
[解决办法]
在实参演绎过程中,如果你的模板参数用的是引用,当你传递数组的时候,该数组是不会退化的。也就是说对第一种,"apple"和"tomato"都保持了各自的原型,一个是const char[6],一个是const char[7],因此第一种推导导致T既是const char[6]又是const char[7],故引起错误。第二中会引起常规的数组到指针的退化,二者都是const char*,所以没什么问题。