警告 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
}