在 C 和 C++ 中返回 sizeof() 运算符的值
return value of sizeof() operator in C & C++
#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
相关文章:
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 在C++中,运算符 sizeof 返回什么数据类型?
- sizeof() 运算符在 C++ 中的函数
- 在 sizeof 运算符上强制编译时错误
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- sizeof(…)运算符结果的使用令人困惑
- 在可变参数模板中使用 sizeof 运算符跳过递归结束的函数
- 增量运算符不适用于 sizeof
- 编译器如何在c中计算sizeof运算符
- C 和 C++ 中的不同输出与 sizeof 运算符
- 在 typedef-ed 结构上使用 sizeof 运算符
- 对sizeof运算符感到困惑
- sizeof()运算符为数组和指向数组的指针返回不同的值
- 为什么 sizeof 运算符无法在函数模板中工作
- 在 C 和 C++ 中返回 sizeof() 运算符的值
- 为什么 sizeof 运算符不显示大小为 20
- C/C++ sizeof 运算符:为什么 sizeof( 'a' ) 返回不同的值?
- sizeof 运算符为 C 和 C++ 返回不同的值?
- 对象表示形式的定义和运算符sizeof