为什么我们需要区分赋值和布尔条件,例如'='vs'=='运算符?情境不足以防止歧义吗?有什么例子可以说明它何时会模棱两可?这不是一个真正的编程问题,但我发现它很有趣。
答案 0 :(得分:3)
这取决于语言。但是例如在C语言中,赋值是具有值的表达式,而不是语句。 因此
if(a = b)
是有效的代码,并且在此代码之前的b
为非零(即C时为true
)时为真,并且还将b的旧值分配给a。
另一方面,
if(a == b)
仅在a
和b
具有相同的值并且不执行赋值时为真。
从C中“继承”的语言(如Java和C#)保留了此逻辑,但是通过要求条件必须具有布尔类型来减少了出错的可能性。因此,我的第一个示例将导致编译器错误(只要a
和b
不是布尔变量)。