如何解决警告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)
。但是我看到了一些花招:
警告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 举报,一经查实,本站将立刻删除。