这可能是一个愚蠢的问题,但有人可以为C ++ 11和C11提供标准参考:
char
默认提升为int
?
这里有一点背景:C和C ++都有默认参数提升的概念(C ++ 11:5.2.2 / 7; C11:6.5.2.2/6)。这需要在以下调用中提升参数:
void f(int, ...);
float a = 1; short int b = 2; char c = 'x';
f(0, a, b, c);
对于函数调用,a
转换为double
,b
转换为int
。但是c
会发生什么?我一直认为char
也被提升为int
,但我无法在标准中找到相关陈述。
答案 0 :(得分:13)
首先,默认参数促销
6.5.2.2
如果表示被调用函数的表达式有一个 不包含原型的类型,整数促销 对每个参数执行,以及类型为float的参数 晋升为双倍。这些被称为默认参数 促销
现在进行整数提升:
6.3.1.1
无论是int还是unsigned,都可以在表达式中使用以下内容 可以使用int:
- 具有整数类型的对象或表达式(除了int或 unsigned int)其整数转换等级小于或 等于int和unsigned int的等级。
如果int可以表示原始类型的所有值(限制为 通过宽度,对于一个位域,该值被转换为int; 否则,它将转换为unsigned int。这些被称为 整数促销。
因此,对于C,至少char
默认提升为int
或unsigned int
。