gpt4 book ai didi

C++:仅使用无符号类型时有符号/无符号不匹配

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:36 24 4
gpt4 key购买 nike

当我尝试使用启用了警告级别/W4 的 Visual Studio 2010 C++ 编译器 (X86) 编译以下 C++ 程序时,我在标记的行收到有符号/无符号不匹配警告。

#include <cstdio>
#include <cstdint>
#include <cstddef>

int main(int argc, char **argv)
{
size_t idx = 42;
uint8_t bytesCount = 20;

// warning C4389: '==' : signed/unsigned mismatch
if (bytesCount + 1 == idx)
{
printf("Hello World\n");
}

// no warning
if (bytesCount == idx)
{
printf("Hello World\n");
}
}

这让我很困惑,因为我只使用无符号类型。自比较

bytesCount == idx

没有这样的警告,它可能与这里发生的一些奇怪的隐式对话有关。

因此:我收到此警告的原因是什么?根据什么规则进行此对话(如果这是原因)?

最佳答案

1 是一个带符号的文字。试试 bytesCount + 1U。

由于添加了有符号和无符号值 (bytesCount + 1),编译器可能正在创建有符号类型的临时值

关于C++:仅使用无符号类型时有符号/无符号不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com