【问题标题】:Why do we need a conditional equals operator?为什么我们需要条件等于运算符?
【发布时间】:2018-06-29 18:14:02
【问题描述】:

为什么我们需要区分赋值和布尔条件,例如 '=' 和 '==' 运算符?上下文不足以防止歧义吗?有没有什么时候会模棱两可的例子?这不是一个真正的编程问题,但我觉得它很有趣。

【问题讨论】:

  • 我投票结束这个问题,因为“这不是一个真正的编程问题”。
  • 这取决于您的语言处理的上下文。你会如何解释a = b = ca 现在是否等于 bc,还是比较 bc 的结果是否相等?还是严格来说是一个布尔表达式,检查abc 是否相等?
  • 看起来这是一道计算机科学问题。

标签: parsing compiler-construction lexical-analysis


【解决方案1】:

这取决于语言。但例如在 C 中,赋值是一个有值的表达式,而不是一个语句。 因此

if(a = b)

是有效代码,只要b 在此代码之前为非零(即 C 意义上的 true),其计算结果为 true,并且还将 b 的旧值分配给 a。 另一方面,

if(a == b)

仅当 ab 具有相同的值且不进行赋值时才为真。

从 C“继承”的语言(如 Java 和 C#)保留了这种逻辑,但通过要求条件必须具有布尔类型来减少错误的可能性。因此,我的第一个示例将导致编译器错误(只要 ab 不是布尔变量)。

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 2022-01-14
    • 2011-04-14
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    相关资源
    最近更新 更多