警告C4018:“<”:有符号/无符号不匹配?
当我在 VS 下编译这段代码时,它会抛出一个警告。
if (m_nDarksideEffectAttCnt < m_DarkTargetIndex.size())
if (m_DuelWatchUserList.size() <= iIndex)
警告:
& warning C4018: '<=' : signed/unsigned mismatch
任何解决方案?
回答
正如警告所说,这是因为有符号(即m_nDarksideEffectAttCnt,iIndex)和无符号(即m_DuelWatchUserList.size())类型的比较。
在c++20 中正是为此,我们有std::cmp_less
#include <utility> // std::cmp_less
if (std::cmp_less(m_nDarksideEffectAttCnt, vec.size()))
{
//
}
这也涵盖了这种情况,如果我们错误地static_cast将-1(ie int) to unsigned int。也就是说,以下不会给你一个错误:
static_assert(1u < -1);
但是下面会
static_assert(std::cmp_less(1u, -1)); // error
还检查其他功能
std::cmp_equal
std::cmp_not_equal
std::cmp_greater
std::cmp_less_equal
std::cmp_greater_equal
- 好的!我不知道这些功能!+1