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

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

Описание

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

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

Объяснение

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

Реализация Polyspace

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

Базовый тип данных выражения cvalue является самым широким из типов данных операнда в выражении. Например, если вы добавляете две переменные, одну из int8_t type (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. В этом случае базовый тип данных сложения совпадает с типом переменной, которой назначен результат.

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

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