gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:01:26 32 4
gpt4 key购买 nike

#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 将字 rune 字定义为具有 int 类型,而 C++ 认为它们具有 char 类型。

这是一个多字符常量很有用的情况:

const int foo = 'foo';

这将生成一个整数,其值可能是 6713199 或 7303014,具体取决于字节顺序和编译器的心情。换句话说,多字符字面量不是“可移植的”,你不能依赖于容易预测的结果值。

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

另外,作为我喜欢在讨论主题时提及的小提示,请注意 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');

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

关于c++ - C & C++ 中 sizeof() 运算符的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19658533/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com