AUTOSAR C++14 Rule M5-0-8

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

Описание

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

Явное интегральное или преобразование с плавающей точкой не должно увеличивать размер базового типа 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