Share via


Advertencia C26451

Desbordamiento aritmético: uso del operador "operator" en un valor de byte de tamaño-a y, a continuación, conversión del resultado en un valor de byte de tamaño-b. Convierta el valor en el tipo más amplio antes de llamar al operador 'operator' para evitar el desbordamiento (io.2)

Esta advertencia indica un comportamiento incorrecto derivadas de reglas y tipos de promoción integrales mayores que aquellos en los que normalmente se usa la aritmética.

Comentarios

El análisis de código detecta cuándo se desplaza un valor entero a la izquierda, se multiplica, se suma o se resta, y el resultado se convierte en un tipo integral más amplio. Si la operación desborda el tipo entero más estrecho, se pierden los datos. Para evitar esta pérdida, convierta el valor en un tipo más amplio antes de la operación aritmética.

Nombre del análisis de código: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE

Ejemplos

El código siguiente genera esta advertencia:

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

  // code
}

Para corregir esta advertencia, utilice el código siguiente:

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

  // code
}

Consulte también

26450
26452
26453
26454
ES.103: No desbordar