为什么调用函数时会unsigned char
自动提升为an ?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)