您的位置:程序门 -> c/c++ -> c++ 语言



谁给我说说 if语句


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


谁给我说说 if语句[已结贴,结贴人:lx6636]
发表于:2008-01-10 22:34:10 楼主
无意中写了这样一段代码

c/c++ code
int x = -1; if (x) cout<<"yes"<<endl; else cout<<"no"<<endl;


为什么if语句会判断为true?  
是因为x要在if中使用,就必须先转成bool类型??

哪位给我讲讲原因,谢谢
发表于:2008-01-10 22:36:031楼 得分:0
c/c++ code
0是true; 非0就是false吧,
发表于:2008-01-10 22:37:192楼 得分:0

判斷數字的話,應該非0的數,都為真。
发表于:2008-01-10 22:39:003楼 得分:10
if是条件语句
判断if中的条件是否为真
那对于非bool型变量来讲,其值只有0或非0
对应逻辑只有假和真
所以x非0时,if条件就是为真
当x为0时,if条件就是为假

而对于bool来讲,就更简单了
0对应假,1对应真
发表于:2008-01-10 22:40:204楼 得分:0
不知道是不是转换成true才做的判断
反正在c/c++里面只要不是0   null   都会被识别为true;
发表于:2008-01-10 22:48:205楼 得分:10
c++并不是强类型的语言,if后面表达式只要值不为0就表示判断成立。你可以看一下反汇编,当x是int时,if   (x)的反汇编是

assembly code
00da1a05 cmp dword ptr [x],0 00da1a09 je wmain+58h (0da1a38h)


只是跟0比较了一下。当a是bool时,if   (a)的反汇编是

assembly code
00da1a67 movzx eax,byte ptr [a] 00da1a6b test eax,eax 00da1a6d je wmain+0bch (0da1a9ch)


test   eax,eax说白了也就是测试eax是否为0。所以,c++之中不会转换为bool,主要还是当作数字处理。
发表于:2008-01-10 22:54:566楼 得分:0
感谢诸位的回答,谢谢。结贴
发表于:2008-01-10 22:55:517楼 得分:0
“c++并不是强类型的语言”

汗!!!!!!!


快速检索

最新资讯
热门点击