arr.size()是无符号数据类型,通常为size_t。随着i未签名,i >= 0永远是true。1从一个无符号变量中减去0该类型可以容纳的最大数量。结果,它将永远循环。
然后发生的事情是不确定的,因为您的数组索引将变成一个巨大的值,并且arr[i]values 将具有未定义的行为>= arr.size()。如果你有一个int而不是auto,它会起作用,因为这i--将导致它最终是-1然后i >= 0将是false,退出循环。
可以在此处找到此翻转行为的解释:
无符号整数算术总是以 2 n
n为模执行 ,其中是该特定整数中的位数。例如,对于 unsigned int,UINT_MAX给 ?0?,然后从 ?0? 中减去 1?给UINT_MAX.
因此,对于size_t,1从0结果中减去,结果SIZE_MAX通常为18446744073709551615。
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |