C4706 de aviso (nível 4) do compilador
atribuição em expressão condicional
O valor de teste em uma expressão condicional foi resultado de uma atribuição.
Uma atribuição tem um valor (o valor no lado esquerdo da atribuição) que pode ser usado legalmente em outra expressão, incluindo uma expressão de teste.
O exemplo a seguir gera C4706:
// C4706a.cpp
// compile with: /W4
int main()
{
int a = 0, b = 0;
if ( a = b ) // C4706
{
}
}
O aviso ocorrerá mesmo se você duplicar os condição de teste entre parênteses:
// 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 podem fazer uma atribuição, use o == operador. Por exemplo, a seguinte linha testes se um e b são iguais:
// C4706c.cpp
// compile with: /W4
int main()
{
int a = 0, b = 0;
if ( a == b )
{
}
}
Se você pretende fazer com que o seu teste o resultado de uma atribuição de valor, teste para garantir que a atribuição é diferente de zero ou não nulo. Por exemplo, o código a seguir não irá gerar este aviso:
// C4706d.cpp
// compile with: /W4
int main()
{
int a = 0, b = 0;
if ( ( a = b ) != 0 )
{
}
}