/ / Que fait l'opérateur “=!”? - c ++, opérateurs

Que fait l'opérateur "=!"? - c ++, opérateurs

J'ai accidentellement tapé =! au lieu de != cela a provoqué un énorme bug dans un système qui n'a pas été détecté pendant un certain temps; Je l'ai corrigé depuis mais je suis curieux de savoir quoi =! Est-ce que.

J'avais quelque chose comme ça

void foo(int param)
{
int a = 0;

...

if (a =! param)
{
// never got here even when `a` was not equal to `param`
}
...
}

Quelqu'un peut-il expliquer ce qui précède if déclaration évalue?

Réponses:

26 pour la réponse № 1

Cette expression:

a =! param

assigne la valeur !param à a. !param est une version refusée de param évaluée dans un contexte booléen.

Les opérateurs d’affectation renvoient la valeur du côté droit. if (a = !param) exécute aussi le if corps, si !param est vrai.


9 pour la réponse № 2

Ce n'est pas un seul =! opérateur. Ses = et !, cession et négation.

Cela équivaut à if (a = !param), ou

a = !param;

if (a) {

}

6 pour la réponse № 3

=! n'est pas un opérateur. C'est le = (affectation), et le ! (booléen pas) opérateur.

Donc vous avez if (a = !param). L'affectation renvoie la valeur de l'affectation, vous avez donc essentiellement:

a = !param;
if (a) {
...

5 pour la réponse № 4

Si vous considérez qu'il peut s'agir de plusieurs jetons, l'effet devrait être simple:

if (a = !param)

2 pour la réponse № 5

Important: "=!" != "!=" :)

Mais: "=!" == "assignment of the negation of a value"

par exemple. en pseudo:

bool a= true;
bool b=!a;

alors b est faux!


1 pour la réponse № 6

=! N'est pas un opérateur. Vous pouvez le comprendre comme ça. Supposons qu'il y ait une déclaration a=!b c’est une assignation de l’opérande b dans a mais ici la torsion est antérieure à l’assignation de b à a nous inversons l’état de b en préfixant l’opérande b avec! ce qui est fondamentalement logique pas opérateur.