Что означает "=!" оператор?

Я случайно набрал =! вместо !=, что вызвало огромную ошибку в системе, которая некоторое время не обнаруживалась; Я исправил это с тех пор, но мне любопытно, что делает =!.

У меня было что-то вроде этого

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 с помощью! который в принципе не является оператором.