警告 C26451
算術溢位:在大小 位元組值上使用 運算子 ' operator ',然後將結果 轉換成 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
}