Почему он использует ссылку для получения указателя? Скопировать указатель или взять ссылку одинаково дорого, не так ли?
Я предполагаю, что есть шаблон функции:
template <typename T>
int compare(T const &t1, T const &t2) { ... }
, и он используется в другом месте вкодовая база.
Чтобы создать специализацию шаблона для char const*
, вам необходимо использовать:
template <>
int compare(char const* const &p1, char const* const &p2) { ... }
// <-- T -->
Не может первая версия принять строковые литералы?
Да, может.
Почему он использует шаблон для функции, которая не требует шаблонных параметров? Он пытается перегрузить другую функцию шаблона, если это не разумная причина, не так ли?
Это синтаксис для специализации шаблона функции. Это может быть перегрузка функции вместо шаблона функции , только если функция вызывается без явного указания параметра шаблона.
Если вы определите
int compare(char const* const &p1, char const* const &p2) { ... }
, она выиграетне вызывается, когда вызывающий абонент использует compare<char const*>(s1, s2)
.
Он вызывается, когда вызывающий абонент использует compare(s1, s2)
.