int a = 5;
if(a = 5)
{
cout<<"111111"<<endl;
}
if(a = 0)
{
cout<<"22222"<<endl;
}
reslut是
111111 按任意键继续
对某些提交进行处理,分配成功,结果为真。
“a = 0”和a = 1“应该分配成功。但结果只是第一次执行....
为什么?
答案 0 :(得分:6)
有些评论?这似乎很狡猾,在这种情况下是不正确的。
operator=
上int
的结果是已分配的值。在这种情况下,a = 5
会导致5
和a = 0
结果为0.由于5
评估为true
,您会看到“111111”,但自0
以来评估为false
您没有看到“22222”。
至于分配值的分配原因,请考虑多个分配的情况:
a = b = 5;
这与:
相同a = (b = 5);
因此,要按预期工作,(b = 5)
必须返回5。
答案 1 :(得分:5)
a=5
的结果为5
,a=0
的结果为0
,因此您的计划如下:
int a = 5;
if(5)
{
cout<<"111111"<<endl;
}
if(0)
{
cout<<"22222"<<endl;
}
由于if语句需要布尔值,5
会转换为true
而0
会隐式转换为false
。所以你的程序现在就像:
int a = 5;
if(true)
{
cout<<"111111"<<endl;
}
if(false)
{
cout<<"22222"<<endl;
}
所以它只打印“111111”。
“对某些商品进行处理,分配成功,结果为真” 赋值的结果是左侧表达式的结果。
答案 2 :(得分:0)
“a = 0”和a = 1“应该分配成功。但结果只是第一次执行....
不。 0
是假的,你也可以写“
if(0) { /* some code which will never execute */ }
if
语句评估括号之间表达式的结果,这意味着必须在检查条件之前完全评估表达式本身。