首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

使用字符串作为函数模板实参的有关问题?

2012-02-29 
使用字符串作为函数模板实参的问题??#includestringtemplate typename Tinline T const& max(T const&

使用字符串作为函数模板实参的问题??
#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*,所以没什么问题。

热点排行