У меня есть небольшая программа:
#include<iostream>
using namespace std;
void f(int) { cout << "int\n"; }
void f(short) { cout << "short\n"; }
int main(void){
char c = 0;
f(c);
return 0;
}
Он печатает int. Я чувствовал, что, если это связано с "Целом продвижение", почему не short предпочтительнее?
Я также знаю, что целочисленное продвижение происходит в выражении (например, A = B). Но у меня нет выражения при вызове f(), правильно?
Если это связано с правилом разрешения перегрузки, почему передача char в f приведет к компиляторам, предпочитающим int - short?
Если я удалю f(int), тогда f(c) вызовет f(short)!
Итак, в заключение, мой вопрос в том, связано ли это с "Целом продвижение" или просто с "правилом разрешения перегрузки"? И почему?