Avviso C26451
Overflow aritmetico: uso dell'operatore 'operator' su un valore di byte di dimensioni e quindi cast del risultato in un valore byte size-b. Eseguire il cast del valore al tipo più ampio prima di chiamare l'operatore 'operator' per evitare l'overflow (io.2)
Questo avviso indica un comportamento errato risultante da regole di promozione integrali e tipi maggiori di quelli in cui viene in genere eseguita l'aritmetica.
Osservazioni:
L'analisi del codice rileva quando un valore integrale viene spostato a sinistra, moltiplicato, aggiunto o sottratto e il risultato viene eseguito il cast a un tipo integrale più ampio. Se l'operazione supera il tipo integrale più stretto, i dati andranno persi. È possibile evitare questa perdita eseguendo il cast del valore a un tipo più ampio prima dell'operazione aritmetica.
Nome dell'analisi del codice: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE
Esempi
Il codice seguente genera questo avviso:
void leftshift(int i) noexcept
{
unsigned long long x;
x = i << 31; // C26451 reported here
// code
}
Per correggere questo avviso, usare il codice seguente:
void leftshift(int i) noexcept
{
unsigned long long x;
x = static_cast<unsigned long long>(i) << 31; // OK
// code
}