コンパイラの警告 (レベル 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 )
   {
   }
}