【发布时间】:2013-02-07 07:26:48
【问题描述】:
为什么在调用函数时unsigned char 会自动提升为int?在下面的示例中,有一个 f(int) 和一个 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)
【问题讨论】:
-
unsigned char的所有可能值都可以用int表示。它们不能全部由签名的char表示。
标签: c++