微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

警告C26451算术溢出:使用运算符'-'

如何解决警告C26451算术溢出:使用运算符'-'

我不明白为什么要标记此问题:

<div class="row">
  <div class="col-lg-9">
    <div class="row">
      <div class="col-lg-4">#1</div>
      <div class="col-lg-4">#2</div>
      <div class="col-lg-4">#3</div>
      <div class="col-lg-4">0</div>
      <div class="col-lg-4">0</div>
      <div class="col-lg-4">0</div>
    </div>
    <div class="row">
      <div class="col-lg-12">
        <!-- Your card code goes here -->
      </div>
    </div>
  </div>
  <div class="col-lg-3">
    <!-- Your button collection code goes here -->
  </div>
</div>

方法的定义是:

InitAssignmentCell(iNumRows - 1,strDescription,IMG_UNCHECKED,static_cast<LParaM>(iNumRows - 1));

因此,最后一个参数是InitAssignmentCell(int iRow,CString strAssignment,int iCheckState,LParaM lParam) 。但是我看到了一些花招:

enter image description here

警告C26451算术溢出:在4字节值上使用运算符'-',然后将结果转换为8字节值。在调用运算符“-”之前,将值强制转换为更宽泛的类型,以避免溢出(io.2)。

我不明白这一点,因为LParaM的类型为iNumRows

我已经看到答案here与此类似,我的直觉是这是一个错误的警告。

解决方法

MSVC静态分析器发出的C26451警告是非常。它警告您,您可能会假设升职是在演员阵容之前自动执行的(不是)。

要使警告静音,请在算术运算之前执行强制转换。因此,代替:

InitAssignmentCell(iNumRows - 1,strDescription,IMG_UNCHECKED,static_cast<LPARAM>(iNumRows - 1));

使用:

InitAssignmentCell(iNumRows - 1,static_cast<LPARAM>(iNumRows) - 1L);

您实际上并不需要后缀L(对于64位版本而言,则是LL),但是对于以后的读者来说,这很清楚您知道自己在做什么。常数的更精确(但很难看)是static_cast<LPARAM>(1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。