为什么我们需要一个条件等于运算符?

时间:2018-06-29 18:14:03

标签: parsing compiler-construction lexical-analysis

为什么我们需要区分赋值和布尔条件,例如'='vs'=='运算符?情境不足以防止歧义吗?有什么例子可以说明它何时会模棱两可?这不是一个真正的编程问题,但我发现它很有趣。

1 个答案:

答案 0 :(得分:3)

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

if(a = b)

是有效的代码,并且在此代码之前的b为非零(即C时为true)时为真,并且还将b的旧值分配给a。 另一方面,

if(a == b)

仅在ab具有相同的值并且不执行赋值时为真。

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