为什么 C 中字符文字的大小与 C++ 中的不同

Why is the size of a character literal in C different than in C++

我知道 C 和 C++ 中的每个文字都有特定的类型信息。 我用 C 编写了这个小程序,并在 Visual Studio 2012 年编译了它。 源文件名为 'main.c'.

#include <stdio.h>
int main()
{
    printf("sizeof(char) = %d\n",sizeof(char));
    printf("sizeof('i') = %d",sizeof('i'));
    getchar();
    return 0;
}

输出:

sizeof(char) = 1
sizeof('i') = 4

我想知道一个字符的大小不是 1 字节。我将源文件重命名为 'main.cpp',现在 sizeof('a') 按预期返回了 1。因此,必须存在特定于语言的差异。为什么 C 中 char 的大小是 4 字节而不是 1?

因为在C++中字符字面量的类型是char,而在C中是int。当然 sizeof(char) 本身在两种语言中根据定义都是 1。

在 C 中,出于向后兼容的原因,'i' 的类型为 int。因此 sizeof('i') 显示了所选编译平台上 int 的大小。

在 C++ 中,由于重载使得避免为表达式提供意外类型变得更加紧迫,因此决定打破向后兼容性并为 'i' 提供类型 char.