gpt4 book ai didi

c++ - 循环计数的有符号值与无符号值

转载 作者:IT老高 更新时间:2023-10-28 22:34:37 25 4
gpt4 key购买 nike

所以我在程序中有一个普通的 for 循环,通过对象 vector (我定义的类型的对象,如果相关的话):

for(int k = 0; k < objects.size(); k++){ ... }

...当我编译时,我收到以下警告:

warning: comparison between signed and unsigned integer expressions 

这是有道理的,因为我认为 vector 的 size() 返回一个 size_t。但是这有什么关系呢?一定数量的元素(甚至内存块)不是你可以计算的整数吗?更重要的是,由于我的程序有多个这样的循环并且碰巧有很多段错误,这可能是它的一部分吗?

最佳答案

object.size() 返回的值大于k 的最大可表示值时,就会出现问题。由于 k 是有符号的,与 size_t1 相比,它只有最大值的一半。

现在,这可能不会在您的特定应用程序中发生(在典型的 32 位系统上,您的集合中将有超过 20 亿个对象),但使用正确的类型总是一个好主意。

1.先发制人的反驳:是的,这仅适用于使用典型二进制补码算法的机器,以及 intsize_t 使用相同位数表示的机器。

关于c++ - 循环计数的有符号值与无符号值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905840/

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