首页 > 解决方案 > 请证明这个执行的合理性 c++

问题描述

int x = 5, y = 10;
if(x > 0)
    y = y + 100;
else;
    y = y + 200;
cout << "y = " << y << endl;

输出:310

我知道,只要在 else 之后有一个分号,它就会被视为什么都没有。我也知道,如果没有大括号,那么我们只执行 if 之后的第一条语句。

那么为什么在执行第二条语句时出现这里的答案呢?

另外,如果 else 不存在,第二个也会被执行,为什么?

标签: c++

解决方案


在 anif和 an 之后else必须有一个语句。if条件为时执行aftertrue语句else,条件为 false 时执行 after 语句。

现在重要的是要了解以下内容:

  1. 单个分号;是一个语句。这是一个空语句,将其放在后面if或后面else就满足了语句的要求。

  2. 大括号之间的块{}是一个语句。它将多个语句组合在一起,但它是一个语句,因此也满足要求。

在 or之后的第一条语句之后的任何其他语句都与iforelse无关,if并且else将像任何其他代码一样执行。

所以分解你的例子:

if(x > 0)
    y = y + 100;
else;
    y = y + 200;

相当于:

if(x > 0)
    y = y + 100;  // first statement after if
else
    ;             // first statement after else

y = y + 200;      // separate statement uneffected by if or else

删除else给我们这个:

if(x > 0)
    y = y + 100;  // first statement after if

y = y + 200;      // separate statement uneffected by if

当然该语句将被执行,因为它与或y = y + 200;无关。ifelse


推荐阅读