Я начал читать C ++ Templates - полное руководство Josuttis и Vandevoorde.И мой крошечный ум застрял.
Авторы заявляют, что «Вы должны ограничить свои изменения числом параметров или указанием параметров шаблона явно», используя это в качестве примера, который вызывает проблемы:
template <typename T>
inline T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
// maximum of two C-strings
inline char const* const& max( char const* a, char const* b)
{
return std::strcmp(a, b) < 0 ? b : a;
}
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
return max( max(a,b), c);
}
Они говорят, что использование max аргумента с тремя аргументами является ошибкой -
const char * s1 = "fred";
const char * s2 = "anica";
const char * s3 = "lucas";
::max(s1, s2, s3); // ERROR
", потому что для C-строк max(a,b)
создает новое временное локальное значение, которое может быть возвращенофункция по ссылке.Но я скомпилировал и запустил его просто отлично.
Может кто-нибудь объяснить, что автор говорит в этом примере?