次の方法で共有


警告 C26451

算術オーバーフロー: 'operator' 演算子を size-a バイト値に使用し、結果を size-b バイト値にキャストします。 オーバーフローを回避するために演算子 'operator' を呼び出す前に、より広い型に値をキャストします (io.2)

この警告は、整数の上位変換規則と、算術が通常実行される型よりも大きい型の結果として生じる正しくない動作を示しています。

解説

コード分析は、整数値が左にシフト、乗算、加算、または減算され、その結果がより広い整数型にキャストされると、それを検出します。 操作がより狭い整数型をオーバーフローした場合、データは失われます。 算術演算の前により広い型に値をキャストすると、この損失を防ぐことができます。

コード分析名: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE

この警告が発生するコード例を次に示します。

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = i << 31;  // C26451 reported here

  // code
}

この警告を解決するには、次のコードを使用します。

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = static_cast<unsigned long long>(i) << 31; // OK

  // code
}

関連項目

26450
26452
26453
26454
ES.103: オーバーフローしない