爲什麼調用函數時的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」表示。 –