AUTOSAR C++14 Rule M5-0-7

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

Описание

Управляйте определением

Не должно быть никаких явных интегральных плаванием преобразований 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