Я экспериментировал, чтобы выяснить, как выводятся аргументы, когда мы используем шаблоны в c ++, но я пришел к случаю, который был для меня странным.
Согласно моему пониманию, параметры шаблона должны присутствовать в параметрах вызова.Но в приведенном ниже коде я попытался пропустить первый параметр шаблона, и код компилируется и работает нормально.Я думаю, у меня есть пробелы в моем понимании.
Это всего лишь экспериментальный код:
#include <iostream>
#include <cstring>
#include <string>
#include <typeinfo>
using namespace std;
template <typename T, typename T1>
T1 const& max (T1 const & a, T1 const & b) //"typename T" is not present here
{
cout<<"inside func max a: "<<typeid(a).name()<<endl;
cout<<"inside func max b: "<<typeid(b).name()<<endl;
return a < b ? b : a;
}
int main ()
{
::max<double>(7, 42);
cout<<typeid(::max<double>(7, 42)).name();
}
Этот код работает нормально, без ошибок.Но как удалось пропустить параметр typename T .Может кто-нибудь объяснить, или дать ссылку на это.