Поделиться через


Предупреждение компилятора (уровень 4) C4706

назначение в пределах условного выражения

Тестовое значение в условном выражении получено в результате присваивания.

В левой части присваивания содержится значение, которое может использоваться в другом, в том числе тестовом, выражении.

В следующем примере возникает предупреждение C4706:

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

Если заключить тестовое условие в дублирующие круглые скобки, предупреждение по-прежнему отображается:

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

Если требуется выполнить не присваивание, а проверку соотношения, используйте оператор ==. Например, в следующей строке проверяется равенство значений a и b:

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

Если требуется выполнить присваивание тестового значения, убедитесь, что в результате присваивания не возвращается нулевое значение или null. Например, для следующего кода это предупреждение не отображается:

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