答案 0 :(得分:0)
您向其传递了一个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指针,则可以重载或专门使用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;
}