Зачем нам нужен оператор условного равенства? - PullRequest
0 голосов
/ 29 июня 2018

Почему мы должны различать присваивание и логическое условие, как в операторах '=' vs '=='? Разве контекста не будет достаточно, чтобы предотвратить двусмысленность? Есть ли пример, когда это было бы неоднозначно? Это не совсем вопрос программирования, но я нахожу его интересным.

1 Ответ

0 голосов
/ 29 июня 2018

Это зависит от языка. Но в C, например, присваивание является выражением, которое имеет значение, а не оператором. Следовательно

if(a = b)

является действительным кодом и оценивается как истинное всякий раз, когда b отличался от нуля (т. Е. true в смысле C) перед этим кодом, а также назначает старое значение b для a. С другой стороны,

if(a == b)

имеет значение true, только если a и b имеют одинаковые значения и не выполняют присваивание.

Языки, «унаследованные» от C, такие как Java и C #, сохранили эту логику, но уменьшили вероятность ошибок, требуя, чтобы условие имело тип boolean. Следовательно, мой первый пример вызовет ошибку компилятора (если a и b не являются булевыми переменными).

...