Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 de 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
}