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

20 浏览
0 Comments

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

我知道在C和C++中,每个字面值都有特定的类型信息。

我用C语言编写了这个小程序,并在Visual Studio 2012中编译。

源文件名为“main.c”。

#include 
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字节?

0
0 Comments

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

而在C++中,由于重载使得避免给表达式带来令人惊讶的类型更加迫切,决定打破向后兼容性,将'i'的类型设置为char

问题的出现原因:C和C++对字符字面量类型的定义不一致,C中的字符字面量类型为int,而C++中的字符字面量类型为char

解决方法:如果在C中需要获取字符字面量的大小,可以使用sizeof(int)来代替sizeof('i');而在C++中,可以直接使用sizeof('i')来获取字符字面量的大小。

0
0 Comments

C语言中字符字面量的大小与C++不同的原因是因为在C++中,字符字面量的类型是`char`,而在C中是`int`。尽管根据定义,`sizeof(char)`在两种语言中都是1。

为什么C中的字符字面量的大小与C++不同?你的答案是C++中字符字面量的类型是`char`,而C中的类型是`int`。我猜底层的问题是:为什么C中的字符字面量是`int`类型而不是像C++中的`char`类型。

我不能同意这个观点。问题中提到"为什么一个char的大小...",这清楚地表明了一个误解:字符字面量的类型是`char`。在解决这个问题之前,需要澄清这一点才能问为什么会发生这种情况。

0