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

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)

任何解决方案?

JeJ*_*eJo 6

正如警告所说,这是因为有符号(即m_nDarksideEffectAttCntiIndex)和无符号(即m_DuelWatchUserList.size())类型的比较。

正是为此,我们有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)

  • 好的!我不知道这些功能!+1 (2认同)