関数を呼び出すときにunsigned char
自動的ににプロモートされるのはなぜですか?int
以下の例では、f(int)
とf(char)
関数があります。ビット数が同じであるため、コンパイラがaへの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)