c++ - 请证明这个执行的合理性 c++
问题描述
int x = 5, y = 10;
if(x > 0)
y = y + 100;
else;
y = y + 200;
cout << "y = " << y << endl;
输出:310
我知道,只要在 else 之后有一个分号,它就会被视为什么都没有。我也知道,如果没有大括号,那么我们只执行 if 之后的第一条语句。
那么为什么在执行第二条语句时出现这里的答案呢?
另外,如果 else 不存在,第二个也会被执行,为什么?
解决方案
在 anif
和 an 之后else
必须有一个语句。if
条件为时执行aftertrue
语句else
,条件为 false 时执行 after 语句。
现在重要的是要了解以下内容:
单个分号
;
是一个语句。这是一个空语句,将其放在后面if
或后面else
就满足了语句的要求。大括号之间的块
{}
是一个语句。它将多个语句组合在一起,但它是一个语句,因此也满足要求。
在 or之后的第一条语句之后的任何其他语句都与if
orelse
无关,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;
无关。if
else
推荐阅读
- c# - 在 .NET Core 3 下的 EF 中,我是否仍需要一个显式的 N 对 N 中间实体?
- docker - 如何从 vscode 远程容器查看 docker 日志?
- c# - 获取所有方法调用
- linux - make: 'all' 无事可做,由 automake 和 autoconf 生成的 Make 文件
- javascript - 如何在 js 中为 html 中设置的表删除列标题
- python - 有没有办法可以使用 Kivy 将文件保存到用户的手机?
- java - Java Axis 客户端创建双安全标头
- android - 颤振中的样式复制/粘贴选项
- c# - 如何将 JSON 响应反序列化到我的列表中?
- scip - 了解 SCIP 中的重点设置