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

时间:2013-10-29 12:42:16

标签: c++ c compiler-construction

#include<stdio.h>
int main()
{
    printf("%d", sizeof('a'));
    return 0;
}

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

3 个答案:

答案 0 :(得分:30)

因为,这可能令人震惊,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 %zu\n", sizeof 'a');

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

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

代表了打印您正在调查的尺寸的最简单,最正确的方式。

答案 1 :(得分:2)

在C中,'a'是一个字符常量,被视为一个整数,所以你得到的是4,而在C ++中它被视为一个字符。

可能重复的问题Size of character ('a') in C/C++

答案 2 :(得分:0)

您的示例是C ++与C不兼容的情况之一。在C API中返回单个字符(如getch)返回和int,因为这样可以为EOF标记提供空间( -1)。因此,它将'c'视为int。

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

cout << 'c'

与:

不同
cout << 99