#include<stdio.h>
int main()
{
printf("%d", sizeof('a'));
return 0;
}
为什么上面的代码在 C 和 C++ 中编译时会产生不同的结果?在 C 中,它在 C++ 中打印 4,这是更可接受的答案,即 1。
当我将 sizeof() 中的“a”替换为在主函数中声明的 char 变量时,两种情况下的结果都是 1!
#include<stdio.h>
int main()
{
printf("%d", sizeof('a'));
return 0;
}
为什么上面的代码在 C 和 C++ 中编译时会产生不同的结果?在 C 中,它在 C++ 中打印 4,这是更可接受的答案,即 1。
当我将 sizeof() 中的“a”替换为在主函数中声明的 char 变量时,两种情况下的结果都是 1!
因为,这可能令人震惊,C 和 C++不是同一种语言。
C 将字符文字定义为具有 type int
,而 C++ 认为它们具有 type char
。
这是多字符常量可能有用的情况:
const int foo = 'foo';
这将生成一个整数,其值可能是 6713199 或 7303014,具体取决于字节顺序和编译器的心情。换句话说,多字符字符文字不是“可移植的”,你不能依赖于结果值很容易预测。
正如评论者所指出的(谢谢!)这在 C 和 C++ 中都有效,似乎 C++ 使多字符字符文字成为不同的类型。聪明的!
另外,作为我喜欢在讨论主题时提到的一个小提示,请注意 that sizeof
is not a function 并且 value of size_t
are not int
。因此:
printf("the size of a character is %zu\n", sizeof 'a');
或者,如果您的编译器太旧而不支持 C99:
printf("the size of a character is %lu\n", (unsigned long) sizeof 'a');
代表打印您正在调查的尺寸的最简单和最正确的方法。
在 C 中,'a' 是一个字符常量,它被视为一个整数,因此大小为 4,而在 C++ 中它被视为一个字符。
C/C++ 中可能出现的重复问题Size of character ('a')
您的示例是 C++ 与 C 不兼容的情况之一。在返回单个字符(如getch
)的 C API 中返回,int
因为这为 EOF 标记 (-1) 留出了空间。因此,出于这个原因,它将“c”视为一个 int。
C++ 引入了运算符和函数重载,这意味着我们可能想要处理
cout << 'c'
不同于:
cout << 99