Compartilhar via


Aviso do compilador (nível 4) C4706

atribuição dentro de expressão condicional

O valor de teste em uma expressão condicional foi o resultado de uma atribuição.

Uma atribuição tem um valor (o valor à esquerda da atribuição) que pode ser usado legalmente em outra expressão, incluindo uma expressão de teste.

O seguinte exemplo gera o aviso C4706:

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

O aviso ocorrerá mesmo se você dobrar os parênteses em torno da condição de teste:

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

Se sua intenção é testar uma relação e não fazer uma atribuição, use o operador ==. Por exemplo, a seguinte linha testa se a e b são iguais:

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

Se você pretende tornar seu valor de teste o resultado de uma atribuição, teste para garantir que a atribuição não seja zero ou não nula. Por exemplo, o seguinte código não gerará esse aviso:

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