exponenta event banner

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

Явное преобразование интеграла или с плавающей запятой не должно увеличивать размер базового типа выражения значения

Описание

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

Явное интегральное преобразование или преобразование с плавающей запятой не должно увеличивать размер базового типа выражения cvalue.

Объяснение

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

short op1;
short op2;
int res;
res= static_cast<int> (op1 + op2);
Однако разработчик или рецензент кода может ожидать, что оценка использует тип данных, к которому результат приводится позже. Например, можно ожидать сумму с базовым типом int из-за более позднего актёрского состава.

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

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

Примеры

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

void func() {
     short op1;
     short op2;
     int res;

     res = static_cast<int> (op1 + op2); //Noncompliant
     res = static_cast<int> (op1) + op2; //Compliant

}

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

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

  • Вторая команда сначала преобразует один из операндов в int чтобы сумма фактически оценивалась с базовым типом int.

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

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