为什么C语言中字符字面量的大小与C++不同?

3

我知道在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字节呢?


4
问:C语言中的char类型大小为什么与C++不同? 答:其实它们是相同的。 - David Heffernan
2个回答

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

为什么C语言中字符字面量的大小与C++不同?你的答案是,在C++中,字符字面量的类型是char,而在C中是int。我猜底层问题是:为什么C中的字符字面量是int类型,而不像C++中一样是char类型。 - ouah
@ouah:我不能同意这个观点。问题说“为什么char的大小...”,这清楚地突出了一个误解:字符字面值是char类型。在提出为什么会发生这种情况之前,需要先澄清这一点。 - Jon

5

在C语言中,'i'的类型为int,是为了保持向后兼容性。因此,sizeof('i')显示所选编译平台上int的大小。

而在C++中,由于函数重载需要避免表达式具有令人惊讶的类型,因此决定打破向后兼容性,并将'i'的类型赋值为char


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接