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