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