为什么调用函数时的unsigned char
自动提升为int
?在下面的例子中有一个f(int)
和f(char)
功能。这似乎更符合逻辑,编译器将强制那些unsigned char
参数传递给char
并呼吁f(char)
,因为它们具有相同的位数。它改为调用f(int)
,即使这意味着将参数提升为具有更多位的类型。任何指向规则定义的指针?标准或编译器/平台特定?无符号字符在函数调用时自动提升为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)
'unsigned char'的所有可能值都可以用'int'表示。它们不能全部由签名的“char”表示。 –