首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告C4018:'<‘:有符号/无符号不匹配?

警告C4018:'<‘:有符号/无符号不匹配?
EN

Stack Overflow用户
提问于 2021-08-10 08:32:10
回答 2查看 118关注 0票数 3

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

代码语言:javascript
运行
复制
if (m_nDarksideEffectAttCnt < m_DarkTargetIndex.size())

if (m_DuelWatchUserList.size() <= iIndex)

警告:

代码语言:javascript
运行
复制
& warning C4018: '<=' : signed/unsigned mismatch

有什么解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2021-08-10 08:50:57

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

c++20中,我们有std::cmp_less

代码语言:javascript
运行
复制
#include <utility> // std::cmp_less

if (std::cmp_less(m_nDarksideEffectAttCnt, vec.size()))
{
    // 
}

这也涵盖了如果我们错误地将-1 (即int) static_castunsigned int的情况。也就是说,以下代码不会给您带来错误:

代码语言:javascript
运行
复制
static_assert(1u < -1);

但是下面的代码将

代码语言:javascript
运行
复制
static_assert(std::cmp_less(1u, -1)); // error

还可以查看其他函数

代码语言:javascript
运行
复制
std::cmp_equal
std::cmp_not_equal
std::cmp_greater
std::cmp_less_equal
std::cmp_greater_equal
票数 6
EN

Stack Overflow用户

发布于 2021-08-10 08:39:37

m_nDarksideEffectAttCntiIndex是有符号类型,而(标准库) size()函数返回无符号类型(std::size_t)。

您可以通过将m_nDarksideEffectAttCntiIndex的类型更改为std::size_t或在比较中强制转换来消除该警告:

代码语言:javascript
运行
复制
if(static_cast<std::size_t>(m_nDarksideEffectAttCnt) < m_DarkTargetIndex.size())
//...
if (m_DuelWatchUserList.size() <= static_cast<std::size_t>(iIndex))

或者如果iIndexm_nDarksideEffectAttCnt可以有负值:

代码语言:javascript
运行
复制
if(m_nDarksideEffectAttCnt < static_cast<long long>(m_DarkTargetIndex.size())
//...
if (static_cast<long long>(m_DuelWatchUserList.size()) <= iIndex)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68723437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档