Что означает "=!" оператор?
Я случайно набрал =!
вместо !=
, что вызвало огромную ошибку в системе, которая некоторое время не обнаруживалась; Я исправил это с тех пор, но мне любопытно, что делает =!
.
У меня было что-то вроде этого
void foo(int param)
{
int a = 0;
...
if (a =! param)
{
// never got here even when `a` was not equal to `param`
}
...
}
Может кто-нибудь объяснить, что оценивает вышеуказанный оператор if
?
Ответы
Ответ 1
Это выражение:
a =! param
присваивает значение !param
a
. !param
- отрицательная версия параметра, оцененная в булевом контексте.
Операторы присваивания возвращают значение правой стороны, поэтому if (a = !param)
также выполняет тело if
, если !param
- true.
Ответ 2
Это не один оператор =!
. Это =
и !
, назначение и отрицание.
Это эквивалентно if (a = !param)
, или
a = !param;
if (a) {
}
Ответ 3
=!
не является оператором. Это оператор =
(присваивание) и оператор !
(булевский не).
Итак, у вас есть if (a = !param)
. Назначение возвращает значение присваивания, поэтому вы по существу имеете:
a = !param;
if (a) {
...
Ответ 4
Если вы считаете, что это может быть несколько токенов, эффект должен быть простым:
if (a = !param)
Ответ 5
Важно: '=!' != '!='
:)
Но: '=!' == 'assignment of the negation of a value'
например. в псевдо:
bool a= true;
bool b=!a;
поэтому b является ложным!
Ответ 6
=! Это не оператор. Вы можете это понять. Предположим, что существует оператор a=!b
, это назначение операнда b в a, но здесь закрутка перед назначением b на a мы меняем состояние b путем префикса операнда b с помощью! который в принципе не является оператором.