exponenta event banner

Правило AUTOSAR C++ 14 M5-0-7

Не должно быть явных плавающих-интегральных преобразований выражения значения

Описание

Определение правила

Не должно быть явных плавающих-интегральных преобразований выражения cvalue.

Объяснение

Если вычислить выражение и позже привести результат к другому типу, приведение не повлияет на базовый тип вычисления. Например, в этом примере результат целочисленного деления затем преобразуется в тип с плавающей запятой.

short num;
short den;
float res;
res= static_cast<float> (num/den);
Однако разработчик или рецензент кода может ожидать, что оценка использует тип данных, к которому результат приводится позже. Например, можно ожидать деления с плавающей запятой из-за более позднего приведения.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

развернуть все

void func() {
     short num;
     short den;
     short res_short;
     float res_float;
     
     res_float = static_cast<float> (num/den); //Noncompliant
     
     res_short = num/den;
     res_float = static_cast<float> (res_short); //Compliant

}

В этом примере первый отлив на результате деления нарушает правило, а второй отлив - нет.

  • Первый приведение может привести к неправильному ожиданию того, что выражение вычисляется с базовым типом float.

  • Во втором примере ясно, что выражение вычисляется с базовым типом short. Затем результат приводится к типу float.

Проверить информацию

Группа: Выражения
Категория: Обязательно, Автоматизировано
Представлен в R2019a