以下两个if语句有什么区别?有什么情况下一种可行,而另一种却没有?

时间:2019-02-11 17:48:28

标签: c++ c

在解释问题之前,我想清楚地表明我没有以任何方式使用第二种语法,因为这可能很难理解和不清楚,并且我已经意识到这一点。因此,从清晰度的角度来看,您可能会忽略该问题。

现在,我们假设version: '3.5' services: sp-app-web-ui: container_name: sp-app-web-ui image: swimming-pool/web-ui-service environment: - SPRING_PROFILES_ACTIVE=dev ports: - 8080:8080 network_mode: host spring: application: name: web-ui-service data: mongodb: uri: mongodb://<username>:<pwd>@172.0.0.1:27017/database 都是a类型。 x可能会或可能不会初始化为6或其他东西。

因此,包含第一个if语句的第一个代码段:

int

很清楚那里发生了什么。如果a等于6,则if (a == 6){ x++; } 递增,无论a的值如何。

第二个if语句很简单,因为我想了解它是如何工作的:

x

我测试了几种情况,所有这些都使我得出结论,那两种情况是等效的。 我认为它的工作方式是:编译器评估x,并基于if语句中存在逻辑和运算符的事实,它决定是否对'if (a == 6 && x++) {} '进行评估(不评估)。评估它的正确与否真的很重要,我们不在乎)。如果第一个表达式的计算结果为假,则不必尝试第二个表达式,因为最终的计算结果还是假的。如果第一个表达式的计算结果为true,则必须检查第二个表达式,因此将a == 6递增,与第一个代码段完全相同。

现在,我想知道:

  1. 两者之间是否存在非语法上的差异?

  2. 在两个测试中给定相同的x++x的情况下,可能会出现这样一个情况:一个结果为true,另一个为false?

感谢您的阅读!在此先感谢您的回答!

0 个答案:

没有答案