赋值逻辑运算的结果

时间:2012-07-15 03:14:27

标签: c++ variable-assignment

int  a = 5;
if(a = 5)
{
    cout<<"111111"<<endl;
}
if(a = 0)
{
    cout<<"22222"<<endl;
}

reslut是

111111 按任意键继续

对某些提交进行处理,分配成功,结果为真。

“a = 0”和a = 1“应该分配成功。但结果只是第一次执行....

为什么?

3 个答案:

答案 0 :(得分:6)

有些评论?这似乎很狡猾,在这种情况下是不正确的。

operator=int的结果是已分配的值。在这种情况下,a = 5会导致5a = 0结果为0.由于5评估为true,您会看到“111111”,但自0以来评估为false您没有看到“22222”。

至于分配值的分配原因,请考虑多个分配的情况:

a = b = 5;

这与:

相同
a = (b = 5);

因此,要按预期工作,(b = 5)必须返回5。

答案 1 :(得分:5)

a=5的结果为5a=0的结果为0,因此您的计划如下:

int a = 5;
if(5)
{
    cout<<"111111"<<endl;
}
if(0)
{
    cout<<"22222"<<endl;
}

由于if语句需要布尔值,5会转换为true0会隐式转换为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语句评估括号之间表达式的结果,这意味着必须在检查条件之前完全评估表达式本身。