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

结果是

111111 按任意键继续

根据一些评论,赋值成功,结果为真。</p>

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

为什么 ?

4

3 回答 3

6

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

operator=on s的结果int是已经赋值的值。在这种情况下,a = 5结果为 0。因为评估为您看到“111111”,但因为评估为您没有看到“22222”。5a = 05true0false

至于为什么赋值导致值被赋值,以多个赋值的情况为例:

a = b = 5;

这与以下内容相同:

a = (b = 5);

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

于 2012-07-15T03:25:40.140 回答
5

is的结果和a=5is5的结果,所以你的程序是这样的:a=00

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”。

根据一些评论,赋值成功,结果为真”赋值的结果是左边表达式的结果。

于 2012-07-15T04:10:43.883 回答
0

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

没有。0是假的,你还不如写”

if(0) { /* some code which will never execute */ }

if语句计算括号之间的表达式的结果,这意味着在检查条件之前必须完全计算表达式本身。

于 2012-07-15T03:41:02.813 回答