我正在阅读标准并试图弄清楚为什么如果没有演员表就无法解析这段代码。
void foo(char c) { }
// Way bigger than char
void foo(unsigned long int) { }
int main()
{
foo(123456789); // ambiguous
foo((unsigned long int) 123456789); // works
}
它是这样说的:
4.13 整数转换秩[conv.rank]
每个整数类型都有一个整数转换等级,定义如下:
— 任何无符号整数类型的等级应等于相应有符号整数类型的等级。
— char 的等级应等于signed char 和unsigned char 的等级。
特别是,让我的 jimmies 沙沙作响的是,它没有说任何无符号整数类型,只是无符号字符。我的猜测是 char 通过转换被提升为无符号类型。这是真的?