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

mac*_*c93 18 c c++ compiler-construction

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

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

unw*_*ind 30

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

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

这是多字符常量可能有用的情况:

const int foo = 'foo';
Run Code Online (Sandbox Code Playgroud)

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

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

另外,作为关于主题时我想提及的一个小注,请注意,这sizeof不是一个功能,而且值size_t不是int.从而:

printf("the size of a character is %zu\n", sizeof 'a');
Run Code Online (Sandbox Code Playgroud)

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

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

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