exponenta event banner

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

Выражение cvalue не должно быть неявно преобразовано в другой базовый тип

Описание

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

Выражение cvalue не должно быть неявно преобразовано в другой базовый тип.

Объяснение

Это правило гарантирует, что результат выражения не будет переполнен при преобразовании в другой тип.

Внедрение Polyspace

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

Базовый тип данных выражения cvalue является самым широким из типов данных операнда в выражении. Например, если добавить две переменные, одна из них будет иметь тип int8_t (typedef для char) и другой типа int32_t (typedef для int), дополнение имеет базовый тип int32_t. При назначении суммы переменной типа int8_t, правило нарушается.

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

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

Примеры

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

#include<cstdint>

void func ( )
  {
    int32_t s32;
    int8_t s8;
    s32 = s8 + s8; //Noncompliant
    s32 = s32 + s8; //Compliant
  }

В этом примере правило нарушается, когда две переменные типа int8_t добавляются, и результат назначается переменной типа int32_t. Базовый тип добавления не учитывает целочисленное продвижение и является просто самым широким из типов данных операнда, в данном случае, int8_t.

Правило не нарушается, если один из операндов имеет тип int32_t и результат присваивается переменной типа int32_t. В этом случае базовый тип данных сложения совпадает с типом переменной, которой присвоен результат.

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

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