添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

除法是使用整数运算执行的,这会在返回值被赋予到浮点结果类型之前截断小数部分。 此检查并非总是指示存在 bug,因为有时截断是有意为之的。

在 Visual Studio 2022 中, lnt-integer-float-division 检查是由 C/C++ 代码样式选项中的“截断除法结果”设置控制的。 有关如何更改此设置的信息,请参阅 配置 Linter

在 Visual Studio 2019 中, lnt-integer-float-division 检查是由 C/C++ 代码样式选项中的“转换为浮点的整数除法”设置控制的。 有关如何更改此设置的信息,请参阅 配置 Linter

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.

如何解决此问题

Linter 建议的解决方法是将其中一个除法操作数显式强制转换为浮点类型,这样不会使除法结果被截断。 还可以使用浮点文本,而不使用强制转换。

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.

适用于 C++ 的 IntelliSense 代码 Linter 概述