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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在相同的比较模板函数中有两个不同的答案相关的知识,希望对你有一定的参考价值。

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

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

但是当我添加两个相同的变量时,这个代码得到了正确的结果。如图所示。

enter image description here

答案

你传递了一个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;
}

以上是关于为什么在相同的比较模板函数中有两个不同的答案的主要内容,如果未能解决你的问题,请参考以下文章

Django Queryset 不同视图的相同模板

包体中有两个同名但参数不同的函数是啥意思?

python中有函数重载吗

同构雪花

覆写(Override)和重载(Overload)的比较

相同的变量名,但在两个单独的“ def”函数中具有不同的值。他们不能以某种方式更改代码吗?