C ++ шаблоны запросов - PullRequest
       26

C ++ шаблоны запросов

0 голосов
/ 08 февраля 2010

HI, Я начал изучать C ++ STL Я просто пробую несколько небольших программ. Одна из них ниже:

inline int const& max (int const& a, int const& b) 
{
    return  a < b ? b : a;
}

template <typename T>
inline T const& max (T const& a, T const& b)
{
    return  a < b ? b : a;
}

int main()
{
    ::max(7, 42);         // calls the nontemplate for two ints
    ::max<>(7, 42);       // calls max<int> (by argument deduction)
    ::max('a', 42.7);     // calls the nontemplate for two ints
}

У меня есть несколько основных вопросов !!

  1. почему разрешение области оператор используется здесь?

  2. почему / как что вызов :: max <> (7, 42) будет Предположим, что переданный параметр

    целые?

Ответы [ 3 ]

6 голосов
/ 08 февраля 2010

1) почему разрешение прицела оператор используется здесь?

Возможно, чтобы отличить объявленный здесь максимум от значения в (например) пространстве имен std ::.

2) почему / как этот вызов :: max <> (7, 42) будет предполагать, что переданный параметр является целым числом?

Не нужно ничего предполагать - целочисленные литералы имеют тип int.

И чтобы ответить на вопрос, который вы не задавали:

 max('a', 42.7);

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

3 голосов
/ 08 февраля 2010
  1. Предположительно, чтобы избежать конфликтов с std :: max

  2. Это не предполагает, что параметры являются целыми числами, он видит, что параметры являются целыми числами. Затем предполагается, что аргумент шаблона равен int, поскольку параметры являются целыми числами.

0 голосов
/ 08 февраля 2010

Для 2) то, что вы имеете в виду, это то, почему он работает - шаблон не требует целых чисел, только любые типы, для которых определен оператор "<". Это выполняет целое число, поэтому можно передать его методу шаблона. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...