Ostrzeżenie C26450
Przepełnienie arytmetyczne: operacja "operator" powoduje przepełnienie w czasie kompilacji. Używanie szerszego typu do przechowywania operandów (io.1)
Uwagi
To ostrzeżenie wskazuje, że operacja arytmetyczna była w czasie kompilacji w sposób prowokujący strata. Można to potwierdzić, gdy operandy są wszystkimi stałymi czasu kompilacji. Obecnie sprawdzamy operacje przesunięcia w lewo, mnożenia, dodawania i odejmowania dla takich przepełnienia.
Ostrzeżenie C4307 jest podobnym sprawdzeniem w kompilatorze Microsoft C++.
Nazwa analizy kodu: RESULT_OF_ARITHMETIC_OPERATION_PROVABLY_LOSSY
Przykłady
int multiply()
{
const int a = INT_MAX;
const int b = 2;
int c = a * b; // C26450 reported here
return c;
}
Aby poprawić to ostrzeżenie, użyj następującego kodu.
long long multiply()
{
const int a = INT_MAX;
const int b = 2;
long long c = static_cast<long long>(a) * b; // OK
return c;
}