#include<stdio.h>
#include<conio.h>
void main()
{
if(sizeof(int)>=-2)
printf("True");
else
printf("False");
}
当我尝试使用Turbo C++编译这段代码时,它返回False而不是True。
但是,当我尝试打印int的值时,程序返回2。
这怎么可能 ?而
sizeof(int)
返回2,是2> =-2。 最佳答案
sizeof(int)
替换为std::size_t
类型,该类型在大多数实现中均未签名。
将签名与未签名进行比较会导致奇怪的结果,因为已将签名升级为未签名。
您可以得到明智的结果,如下所示
if(static_cast<int>(sizeof(int)) >= -2)
如果您正在使用
C
编译器if((int)sizeof(int) >= -2)
例如,使用一些警告标志
-Wall
编译代码时,最有可能警告已签名/未签名的比较。 (如果您不忽略警告)