Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выражение целочисленного деления неявно приводится к типу с плавающей запятой.
Деление выполняется с помощью целочисленных операций, в результате чего дробная часть усекается до назначения типу результата с плавающей запятой. Эта проверка не всегда указывает на ошибку, поскольку иногда усечение выполняется намеренно.
В Visual Studio 2022 проверка lnt-integer-float-division
контролируется настройкой Результат усеченного деления в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.
В Visual Studio 2019 проверка lnt-integer-float-division
контролируется настройкой Целочисленное деление, преобразованное в число с плавающей запятой в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.
Примеры
float divide(int i, int j) {
return i / j; // Flagged: The integer division result is implicitly cast to float.
}
float half(int i) {
return i / 2; // Flagged: An integer literal is used.
}
Устранение проблемы
Исправление, предлагаемое анализатором кода, — явно привести один из операндов деления к типу с плавающей запятой, чтобы результат деления не усекался. Можно также использовать литерал с плавающей запятой вместо приведения.
float divide(int i, int j) {
return static_cast<float>(i) / j;
}
float half(int i) {
return i / 2.0;
}
Замечания
Если усечение выполняется намеренно, можно добавить явное приведение, чтобы предотвратить появление предупреждения.
float int_divide(int i, int j) {
return static_cast<float>(i / j); // Not flagged because of the explicit cast.
}