char是默认提升的吗?

时间:2012-08-16 11:02:38

标签: c++ c language-lawyer integer-promotion

这可能是一个愚蠢的问题,但有人可以为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转换为doubleb转换为int。但是c会发生什么?我一直认为char也被提升为int,但我无法在标准中找到相关陈述。

1 个答案:

答案 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默认提升为intunsigned int