以下代码在编译时会抛出编译器错误。
template <typename T>
inline T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
// maximum of two C-strings (call-by-value)
inline char const* max (char const* a, char const* b)
{
return strcmp(a,b) < 0 ? b : a;
}
// maximum of three values of any type (call-by-reference)
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
return max (max(a,b), c);
}
int main ()
{
::max(7, 42, 68);
}
编译时我收到错误:
错误:调用重载'max(const int&amp;,const int&amp;)'是不明确的
注意:候选人是:
注意:const T&amp; max(const T&amp;,const T&amp;)[with T = int]
注意:const char * max(const char *,const char *)
当我们有与调用匹配的模板方法时,max(const char *,const char *)如何成为max(const int&amp;,const int&amp;)的近似匹配?
答案 0 :(得分:1)
我敢打赌你的代码中有using namespace std
。删除它,你会没事的。
比较:http://ideone.com/Csq8SV和http://ideone.com/IQAoI6
如果你需要使用命名空间std,你可以强制执行root命名空间调用(在main()
中的方式):
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
return ::max(::max(a,b), c);
}