exponenta event banner

MISRA C++: Правило 2008 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