jot*_*ota 3 c++ comparison warnings if-statement
当我在 VS 下编译这段代码时,它会抛出一个警告。
if (m_nDarksideEffectAttCnt < m_DarkTargetIndex.size())
if (m_DuelWatchUserList.size() <= iIndex)
Run Code Online (Sandbox Code Playgroud)
警告:
& warning C4018: '<=' : signed/unsigned mismatch
Run Code Online (Sandbox Code Playgroud)
任何解决方案?
正如警告所说,这是因为有符号(即m_nDarksideEffectAttCnt,iIndex)和无符号(即m_DuelWatchUserList.size())类型的比较。
在c++20 中正是为此,我们有std::cmp_less
#include <utility> // std::cmp_less
if (std::cmp_less(m_nDarksideEffectAttCnt, vec.size()))
{
//
}
Run Code Online (Sandbox Code Playgroud)
这也涵盖了这种情况,如果我们错误地static_cast将-1(ie int) to unsigned int。也就是说,以下不会给你一个错误:
static_assert(1u < -1);
Run Code Online (Sandbox Code Playgroud)
但是下面会
static_assert(std::cmp_less(1u, -1)); // error
Run Code Online (Sandbox Code Playgroud)
还检查其他功能
std::cmp_equal
std::cmp_not_equal
std::cmp_greater
std::cmp_less_equal
std::cmp_greater_equal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |