为什么在调用函数时会unsigned char自动提升为int?在下面的示例中,有一个f(int)和一个f(char)函数.似乎更合乎逻辑的是编译器会强制unsigned chara char和a 的参数,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;
}
Run Code Online (Sandbox Code Playgroud)
生成此输出:
void f(int)
void f(char)
void f(int)
Run Code Online (Sandbox Code Playgroud) 我正在从Primer第5版学习C++.其中一个问题是:
在具有32位整数和8位字符的机器上,''q'<< 6的值是多少,它使用拉丁-1字符集,其中'q'具有位模式01110001?
我感到困惑的是编译器会在〜之前或之前将'q'转换为32位int
据我所知,它应该这样工作:
'q' = 01110001
~'q' = 10001110
~'q' << 6 = 00000000000000000010001110000000
Run Code Online (Sandbox Code Playgroud)
我对吗?