为什么在相同的比较模板函数中有两个不同的答案

时间:2019-04-14 05:01:07

标签: c++11

当我尝试实现一个模板来比较两个变量的值时。

当我尝试将字符串作为参数传递时,程序无法正确比较该值。

但是,当我添加两个相同的变量时,此代码为我提供了正确的结果。 如图所示。

enter image description here

1 个答案:

答案 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;
}