在 C 和 C++ 中返回 sizeof() 运算符的值

return value of sizeof() operator in C & C++

本文关键字:运算符 sizeof 返回 C++      更新时间:2023-10-16
#include<stdio.h>
int main()
{
    printf("%d", sizeof('a'));
    return 0;
}

为什么上面的代码在用C和C++编译时会产生不同的结果?在 C 中,它打印 4,而在 C++ 中,它是更容易接受的答案,即 1。
当我用 main 函数中声明的 char 变量替换 sizeof() 中的"a"时,两种情况下的结果都是 1!

因为,这可能令人震惊,C 和 C++ 不是同一种语言

C 将字符文字定义为具有类型 int,而C++认为它们具有类型 char

在这种情况下,多字符常量可能很有用:

const int foo = 'foo';

这将生成一个整数,其值可能是6713199或7303014,具体取决于字节排序和编译器的情绪。换句话说,多字符字符文本不是"可移植的",您不能依赖于易于预测的结果值。

正如评论者指出的那样(谢谢!),这在 C 和 C++ 中都有效,似乎C++使多字符字符文字成为一种不同的类型。聪明!

另外,作为我喜欢在主题中提到的一个小注意事项,请注意sizeof不是一个函数,并且size_t的值不是int。因此:

printf("the size of a character is %zun", sizeof 'a');

或者,如果您的编译器太旧而不支持 C99:

printf("the size of a character is %lun", (unsigned long) sizeof 'a');

表示打印您正在调查的尺寸的最简单、最正确的方法。

在 C 中,"a"是一个字符常量,它被视为整数,因此您得到的大小为 4,而在C++中,它被视为字符。

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

您的示例是C++与 C 不兼容的情况之一。在返回单个字符(如 getch)的 C API 中,返回并int,因为这为 EOF 标记 (-1) 留出了空间。因此,出于这个原因,它将"c"视为整数。

C++引入了运算符和函数重载,这意味着我们可能想要处理

cout << 'c'

不同于:

cout << 99