为什么这个程序的输出在C和C++之间有所不同?

Gab*_*abi 21 c c++ gcc g++

可能重复:
C/C++中的字符大小('a')

以下程序

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof('\0'));
    printf("%d\n", sizeof(0));
}
Run Code Online (Sandbox Code Playgroud)

用gcc输出编译

4
4
Run Code Online (Sandbox Code Playgroud)

和g ++

1
4
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我知道这不是编译器的事情,而是C和C++之间的区别,但是原因是什么?

Dan*_*her 35

在C中,字符常量的类型int符合标准的6.4.4.4(10),

整数字符常量的类型为int.包含映射到单字节执行字符的单个字符的整数字符常量的值是解释为整数的映射字符的表示的数值.

因此,你打印出int两倍的大小.

在C++中,字符常量具有类型char.


Fré*_*idi 12

\0文字字符被视为int在C,所以你实际上最终打印sizeof(int)代替sizeof(char).

ideone给出相同的结果(C,C++).