为什么在相同的比较模板函数中有两个不同的答案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在相同的比较模板函数中有两个不同的答案相关的知识,希望对你有一定的参考价值。
答案
你传递了一个const char *
指针进行比较,它将比较指针地址,而不是内容与'>'。由于它们来自不同的对象/字符串,因此您无法知道哪个将是内存中的第一个或最后一个,并且它可能因编译而异,甚至可能在运行中运行。
正如你有std::string
局部变量,我假设你打算通过它,它有比较运算符来比较内容。如果要将字符串文字作为std::string
传递给此类模板函数,则必须明确地执行此操作,例如:
Max<std::string>("a", "b"); // K is std::string, so both parameters will use the implicit constructor
Max(std::string("a"), std::string("b")); // Explicitly construct strings
如果你确实希望Max
使用char指针,你可能会重载或专门使用say strcmp
,它会比较内容。
template<class T> T Max(T x, T y)
{
return x > y ? x : y;
}
template<> const char* Max(const char *x, const char *y)
{
return strcmp(x, y) > 0 ? x : y;
}
template<> char* Max(char *x, char *y)
{
return strcmp(x, y) > 0 ? x : y;
}
以上是关于为什么在相同的比较模板函数中有两个不同的答案的主要内容,如果未能解决你的问题,请参考以下文章