Witam, mam takie proste i śmieszne funkcje:
void show(int a) {
std::cout << a << std::endl;
}
void show(double a) {
std::cout << a << std::endl;
}
void show(char str[]) {
std::cout << str << std::endl;
}
W zależności od argumentów wywołamy funkcje o odpowiedniej sygnaturze. Albo dla parametru char[], double a czy int a (wiem że może to wszystko nie ma większego sensu ale chce zademonstrować o co mi chodzi). Wywołajmy ją tak:
long int x = 10;
show(x);
//taki sam efekt da:
show(10l);
//funkcja wywoła się dla parametru typu int
To że tu mamy long int a nie int w niczym nie przeszkadza. W sumie nie trudno się domyślić że w argumencie podajemy wartość różną od double oraz char* . Dlaczego zatem:
unsigned int x = 10;
show(x);
//oraz
show(10u);
to wywołanie powoduje już błąd że wiele funkcji przeciążonych jest zgodnych z listą argumentów?
Dlaczego dla typu long int kompilator mógł się zdecydować a dla unsigned int już nie?
Podawałem też w argumentach typy short. long long i nie było żadnego problemu...
Serdecznie dziękuje za wytłumaczenie ;)