MISRA C++:2008 Rule 5-0-8

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

Описание

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

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

Объяснение

Выражения, отмеченные этой проверкой, следуют подробным спецификациям для cvalue выражений из MISRA® Документация C++.

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

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

Дополнительное сообщение в отчете

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

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

Поиск и устранение проблем

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

Примеры

расширить все

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.

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

Группа: Выражения
Категория: Требуемая
Введенный в R2013b