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

Не должно быть неявных преобразований с плавающим интегралом

Описание

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

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

Объяснение

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

Преобразование из целого числа в тип с плавающей точкой может привести к неточному представлению значения. Ошибка от преобразования может накопиться при последующих операциях и привести к неожиданным результатам.

Реализация Polyspace

Шашка помечает неявные преобразования между типами с плавающей точкой (float и double) и целых типов (short, int, и т.д.).

Это правило имеет приоритет над 5-0-4 и 5-0-6, если они применяются одновременно.

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

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

Примеры

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

typedef signed int int32_t;
typedef float float32_t;

void func ( )
  {
    float32_t f32;
    int32_t   s32;
    s32 = f32;   //Noncompliant
    f32 = s32;   //Noncompliant
    f32 = static_cast< float32_t > ( s32 ); //Compliant
  }

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

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

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