【发布时间】:2010-11-14 20:46:33
【问题描述】:
在我的工作中,我们总是会遇到不必要的编码争论。今天我问条件 AND (&&) 或 OR (||) 是否具有更高的优先级。我的一位同事坚持说他们有相同的优先级,我有疑问,所以我查了一下。
根据 MSDN,AND (&&) 的优先级高于 OR (||)。但是,您能向持怀疑态度的同事证明这一点吗?
http://msdn.microsoft.com/en-us/library/aa691323(VS.71).aspx
bool result = false || true && false; // --> false
// is the same result as
bool result = (false || true) && false; // --> false
// even though I know that the first statement is evaluated as
bool result = false || (true && false); // --> false
所以我的问题是你如何用代码证明 AND (&&) 比 OR (||) 具有更高的优先级?如果你的回答是没关系,那为什么要在语言中这样构建呢?
【问题讨论】:
-
语言是这样的,因为他们必须做出决定。就个人而言,我不在乎哪个优先;我会用括号来确保我得到了我期望的结果。这与它为什么做它所做的事情无关。这是关于当您在数周、数月或数年后返回代码时能够弄清楚代码在做什么。
-
@Jeff:这不正确。这个决定有一个数学基础 - 它被称为 布尔代数。
-
@TheSteve:短路不影响表达式结果。它只会影响副作用。
-
你甚至必须考虑它的事实意味着你不应该依赖下一个知道的人,如果有一个问题,办公室里的任何人可能需要花 3 秒时间思考它,然后投入 0.5 秒来添加一个 ( 和一个 )
-
让我看看我是否明白这一点。你的同事对语言有信心。这种信念与规范和实现相矛盾。您的声明与规范和实施一致。那么为什么你是那个试图构建证明的人呢?举证责任在于有疯狂信念的人,而不是有理智信念的人。我不会再在这上面浪费时间了;如果他们想花时间试图证明什么是错误的,那就让他们吧。
标签: c# conditional conditional-operator operator-precedence associativity