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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de