exponenta event banner

MISRA C++: Правило 2008 5-0-4

Неявное интегральное преобразование не должно изменять сигнатуру базового типа

Описание

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

Неявное интегральное преобразование не должно изменять существенность базового типа.

Объяснение

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

Внедрение Polyspace

Средство проверки помечает неявные преобразования из подписанного в неподписанный целочисленный тип данных или наоборот.

Средство проверки предполагает, что ptrdiff_t - целое число со знаком.

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

Неявное интегральное преобразование не должно изменять существенность базового типа.

Неявное преобразование одного из двоичных операндов +, лежащие в основе которого типы typename_1 и typename_2.

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

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

Примеры

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

typedef char int8_t;
typedef unsigned char uint8_t;

void func()
  {
    int8_t s8;
    uint8_t u8;

    s8 = u8; //Noncompliant
    u8 = s8 + u8; //Noncompliant
    u8 = static_cast< uint8_t > ( s8 ) + u8; //Compliant
}

В этом примере правило нарушается при неявном преобразовании переменной с типом данных со знаком в переменную с типом данных без знака или наоборот. Если преобразование является явным, как в предыдущем примере, нарушение правила не происходит.

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

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