Condividi tramite


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
}

Vedi anche

26450
26452
26453
26454
ES.103: Non eseguire l'overflow