【问题标题】:Why does a shorthand if in an and statement without parentheses evaluate incorrectly?为什么不带括号的 and 语句中的简写 if 的计算结果不正确?
【发布时间】:2019-08-21 22:16:55
【问题描述】:

我们将使用一个简单的示例(我有一段更复杂的代码评估不正确)来尽可能清楚地说明这个问题。

我的问题是为什么在添加括号之前它的评估不正确?

我已经通过在速记条件周围添加括号解决了这个问题,找到问题只是很痛苦,因为它对我来说是正确的。

Console.WriteLine(false && true ? false : true);

预期结果:假。

实际结果:是的。

现在让我们添加括号:

Console.WriteLine(false && (true ? false : true));

预期结果:假。

实际结果:假。

在我看来,评估的第一部分是错误的,所以它甚至不应该费心评估 && 操作的后半部分。是什么导致了这种行为?

【问题讨论】:

  • && 的优先级高于 ?docs.microsoft.com/en-us/cpp/c-language/…
  • 要理解你的逻辑为什么会出错,想象一下代码是Console.WriteLine(false && true ? "False1" : "True2");。您希望该代码向控制台写入什么以及为什么&& 并不意味着“如果false”,则不要在右边做任何其他事情。否则我的示例代码可以写一个字符串或布尔值(这显然是不可能的)。
  • 您的期望并没有错。 false && true 评估为 false,并运行三元组的 false 侧,即 true。

标签: c#


【解决方案1】:

特别感谢 Stuartd 和 MjWills。

解释是条件与与条件运算的执行顺序。

因此,执行看起来像这样:

False && True = False -> False ? False : True = True

非常感谢!

【讨论】:

    猜你喜欢
    • 2019-11-23
    • 2012-07-02
    • 1970-01-01
    • 2014-10-20
    • 2015-08-26
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多