警告C4018:“<”:有符号/无符号不匹配?

当我在 VS 下编译这段代码时,它会抛出一个警告。

if (m_nDarksideEffectAttCnt < m_DarkTargetIndex.size())

if (m_DuelWatchUserList.size() <= iIndex)

警告:

& warning C4018: '<=' : signed/unsigned mismatch

    

任何解决方案?

回答

正如警告所说,这是因为有符号(即m_nDarksideEffectAttCntiIndex)和无符号(即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

以上是警告C4018:“&lt;”:有符号/无符号不匹配?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>