Avertissement du compilateur (niveau 4) C4706

affectation dans l’expression conditionnelle

La valeur de test dans une expression conditionnelle a été le résultat d’une affectation.

Une affectation a une valeur (la valeur située à gauche de l’affectation) qui peut être utilisée légalement dans une autre expression, y compris une expression de test.

L’exemple suivant génère l’erreur C4706 :

// C4706a.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( a  = b ) // C4706
   {
   }
}

L’avertissement se produit même si vous doublez les parenthèses autour de la condition de test :

// C4706b.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( ( a  =  b ) ) // C4706
   {
   }
}

Si votre intention est de tester une relation et de ne pas effectuer d’affectation, utilisez l’opérateur == . Par exemple, la ligne suivante teste si a et b sont égaux :

// C4706c.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( a == b )
   {
   }
}

Si vous envisagez de faire de votre valeur de test le résultat d’une affectation, testez pour vous assurer que l’affectation n’est pas nulle ou non null. Par exemple, le code suivant ne génère pas cet avertissement :

// C4706d.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( ( a = b ) != 0 )
   {
   }
}