Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.
В коде не должно быть неявных преобразований значений вещественного типа в целочисленный и наоборот.
Под целочисленными типами подразумеваются:
Под типами с плавающей точкой подразумеваются:
При неявном преобразовании значений вещественных типов в целые может быть утеряна информация (например, дробная часть), а также возможно возникновение неопределенного поведения, если значение вещественного типа не может быть представлено целым типом.
Неявное преобразование значения целого типа в вещественный может привести к его неточному представлению, которое не соответствует ожиданиям разработчика.
Пример кода, на который анализатор выдаст предупреждения:
void foo1(int x, float y); void foo2() { float y = 10; int x = 10.5; foo1(y, x); }
Пример правильного с точки зрения этой диагностики кода:
void foo1(int x, float y); void foo2() { float y = static_cast<float>(10); int x = static_cast<int>(10.5); foo1(static_cast<int>(y), static_cast<float>(x)); }
Данная диагностика классифицируется как:
|