C和C++在sizeof('x')上的差异

dor*_*ron 8 c c++

可能重复:
为什么C字符文字的内部而不是字符?

为什么在使用C时sizeof('x')返回4但sizeof('x')在C++中返回1?

C++通常只是C的超集,所以为什么这两个结果有所不同?

编辑 只是进一步澄清.这似乎是标准委员会的刻意举动,我认为如果没有充分的理由,就不会改变'x'的大小.我对原因感兴趣.

Cub*_*bbi 17

引用C++标准ISO 14882:2003,附录C.1.1第2.13.2节

更改:字符文字的类型从int更改为char

基本原理:这是改进重载函数参数类型匹配所必需的.例如:

int function( int i );
int function( char c );
function( ’x’ );
Run Code Online (Sandbox Code Playgroud)

优选地,该调用匹配第二版函数而不是第一版

(附录C描述了C和C++之间的不兼容性)


kwa*_*ord 7

C++不是C的超集.特别是如果使用"当前"版本 - C++ 0x模式下的编译器将阻塞C99代码.


Jam*_*ran 5

因为是C,'x'实际上是一个int,而在C++中它是一个char.

C++尝试收紧了C中有点松懈的强类型.

  • @tenfour,nope - 在C++中也推送了4个字节.varargs调用有很多类型提升规则. (4认同)