MISRA C++:2008 Rule 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