当我在VS下编译它时,这段代码抛出一个警告。
if (m_nDarksideEffectAttCnt < m_DarkTargetIndex.size())
if (m_DuelWatchUserList.size() <= iIndex)
警告:
& warning C4018: '<=' : signed/unsigned mismatch
有什么解决方案吗?
发布于 2021-08-10 08:50:57
正如警告所说,这是因为有符号(即m_nDarksideEffectAttCnt
,iIndex
)和无符号(即m_DuelWatchUserList.size()
)类型的比较。
在c++20中,我们有std::cmp_less
#include <utility> // std::cmp_less
if (std::cmp_less(m_nDarksideEffectAttCnt, vec.size()))
{
//
}
这也涵盖了如果我们错误地将-1
(即int
) static_cast
到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
发布于 2021-08-10 08:39:37
m_nDarksideEffectAttCnt
和iIndex
是有符号类型,而(标准库) size()
函数返回无符号类型(std::size_t
)。
您可以通过将m_nDarksideEffectAttCnt
和iIndex
的类型更改为std::size_t
或在比较中强制转换来消除该警告:
if(static_cast<std::size_t>(m_nDarksideEffectAttCnt) < m_DarkTargetIndex.size())
//...
if (m_DuelWatchUserList.size() <= static_cast<std::size_t>(iIndex))
或者如果iIndex
和m_nDarksideEffectAttCnt
可以有负值:
if(m_nDarksideEffectAttCnt < static_cast<long long>(m_DarkTargetIndex.size())
//...
if (static_cast<long long>(m_DuelWatchUserList.size()) <= iIndex)
https://stackoverflow.com/questions/68723437
复制相似问题