Napisałem taki szablon funkcji:
#include <iostream>
using namespace std;
template <typename T>
T max(T t[5])
{
T a = t[0];
if(t[1] > a)
a= t[1];
if(t[2] > a)
a= t[2];
if(t[3] > a)
a = t[3];
if(t[4] > a)
a= t[4];
if(t[5] > a)
a= t[5];
return a;
}
int main()
{
short tabshort[5] = {17 , 3 , 15 , 22 , 7}, t1;
double tabdouble[5] = {2.512 , 24.75 , 23.977 , 15.734 , 21.0653},t2;
float tabfloat[5] = {2.5 , 2.7 , 2.9 , 15.7 , 2.0},t3;
int tabint[5] = {1 , 2 , 3 , 4 , 5}, t4;
t1 = max(tabshort);
cout<<t1<<endl;
t2 = max(tabdouble);
cout<<t2<<endl;
t3 = max(tabfloat);
cout<<t3<<endl;
t4 = max(tabint);
cout<<t4<<endl;
return 0;
}
i właśnie nie mogę zrozumieć dlaczego dzieje się tak, że działa to dobrze dla double, float oraz short a nie działa dla int, long i long long - dla nich wypisuje jakieś długie liczby nie związane z tablicami. Zamieniałem typy - tam gdzie short dawałem int, tam gdzie int short i zawsze tak samo - dla short (dla tej samej tablicy, nic nie zmieniane oprócz typu) pokazywało prawidłowo, dla float i double też, a dla int i long już nie. Może mi to ktoś wytłumaczyć?