﻿# V2564\. MISRA\. There should be no implicit integral\-floating conversion\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Данное диагностическое правило актуально только для C\+\+\. В коде не должно быть неявных преобразований значений вещественного типа в целочисленный и наоборот\.

Под целочисленными типами подразумеваются:

* 'signed char', 'unsigned char',
* 'short', 'unsigned short',
* 'int', 'unsigned int',
* 'long', 'unsinged long',
* 'long long', 'unsigned long long'\.

Под типами с плавающей точкой подразумеваются:

* 'float',
* 'double',
* 'long double'\.

При неявном преобразовании значений вещественных типов в целые может быть утеряна информация \(например, дробная часть\), а также возможно возникновение неопределенного поведения, если значение вещественного типа не может быть представлено целым типом\.

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

Пример кода, на который анализатор выдаст предупреждения: 

```cpp
void foo1(int x, float y);
void foo2()
{
  float y = 10; 
  int x = 10.5;  
  foo1(y, x); 
}
```

Пример правильного с точки зрения этой диагностики кода:

```cpp
void foo1(int x, float y);
void foo2()
{
  float y = static_cast<float>(10); 
  int x = static_cast<int>(10.5);  
  foo1(static_cast<int>(y), static_cast<float>(x)); 
}
```