这可能是一个愚蠢的问题,但有人可以为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,但我在标准中找不到相关的说明。

最佳答案

C++

在C++ 2011(ISO/IEC 14882:2011)中,相关部分似乎是:



我将最后两句话分开,以强调他们。它们是标准中第7段的连续部分。



等等。

C

C有两个上下文,默认情况下会提升参数。一种是在函数范围内没有原型(prototype)时(第一个被另一个答案覆盖),第二种是存在带省略号的原型(prototype)时。当然,C++根本不允许第一种情况。这些引号与其他答案选择的标准引自相同的部分,但此处的摘录略长。它们是通过对标准的独立分析发现的,只有在进行交叉检查时,我才注意到这些部分是相同的。

在C 2011(ISO/IEC 9899:2011)中,相关部分似乎是:



第6.3.1.1节定义了“整数促销”:



我注意到,有一次该问题列出了函数void f(...);,它是C++函数而不是C函数。 C不允许省略号显示为该函数的唯一参数。此后问题已更新为void f(int, ...);,在C和C++中均有效。

关于c++ - 字符默认提升吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11985774/

10-11 20:57
查看更多