У меня есть небольшая программа:
#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)
!
Итак, в заключение, мой вопрос в том, связано ли это с "Целом продвижение" или просто с "правилом разрешения перегрузки"? И почему?