为什么 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
.
我知道 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
.