编译器警告(等级 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 )
   {
   }
}