#include <stdio.h>
int main () {
double num = 5.2;
int var = 5;
printf("%d\t", sizeof(!num));
printf("%d\t", sizeof(var = 15/2));
printf("%d", var);
return 0;
}
在 VS 2010 和 GCC 4.7.0 上运行此程序给出的输出为
1 4 5
,使用 Turbo 3.0/4.5 给出的结果为 2 4 5
。
我们从哪里可以获得数据类型的确切大小?
这个问题是一种复杂的方式来询问为什么
sizeof(bool)
在某些编译器中为 1 而在其他编译器中为 2。事实上,C++ 标准并不要求 bool
的大小为 1,这意味着不同的编译器可能会为其分配不同的大小,这就是您问题的答案。
至于为什么它并不要求它是1,看看这个关于
sizeof(bool)
的相关问题。
如果您根本不清楚为什么这里涉及
bool
,那是因为您对 double 值调用 !
运算符,这相当于检查它是否非零,这样的检查会返回 bool
。另外两个打印基本上是 sizeof(int)
(因为 int / int
本身就是 int
)和整数值。