Почему в одном шаблоне сравнения есть два разных ответа - PullRequest
0 голосов
/ 14 апреля 2019

Когда я пытаюсь реализовать шаблон для сравнения значений двух переменных.

Когда я пытаюсь передать строку в качестве параметров, программа не может правильно сравнить значение.

Однако, когда я добавляю две одинаковые переменные, этот код дает мне правильный результат.Как показано на рисунке.

enter image description here

1 Ответ

0 голосов
/ 14 апреля 2019

Вы передали ему указатель 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 работал с указателями на символы,Вы можете перегрузить или специализировать его, чтобы использовать, скажем, 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...