Почему при вызове функции unsigned char
автоматически присваивается int
? В приведенном ниже примере есть функция f(int)
и a f(char)
. Казалось логичнее, что компилятор будет принуждать аргумент unsigned char
к char
и вызывать f(char)
, так как они имеют одинаковое количество бит. Он вызывает f(int)
вместо этого, даже если это означает продвижение аргумента к типу с большим количеством бит. Любые указатели на то, где определено правило? Стандартный или компилятор/платформа?
#include <iostream>
void f( int key )
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
void f( char key )
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
int main( int argc, char* argv[] )
{
int a = 'a';
char b = 'b';
unsigned char c = 'c';
f(a);
f(b);
f(c);
return 0;
}
Производит этот вывод:
void f(int)
void f(char)
void f(int)