C++ 为什么这个if语句的计算结果为true?
C++ 为什么这个if语句的计算结果为true?,c++,C++,我就是不明白。第二条if语句的计算结果为true。您可以在图像中看到调试信息。如果我在If语句中使用k,它的行为与我预期的一样。为什么会这样?谢谢。它的计算结果为true,因为size()返回的是无符号类型 从未签名的代码< 0 > /CODE >中减去未签名的 1代码>,则得到一个大的正数,比“代码> 2”/代码>大。当然, 代码()/代码>返回一个:ST:::vector:siZeHype类型< /代码>类型,由C++标准保证为无符号< /代码>类型。< /P> 两种无符号类型之间的区别在于
我就是不明白。第二条if语句的计算结果为true。您可以在图像中看到调试信息。如果我在If语句中使用
k
,它的行为与我预期的一样。为什么会这样?谢谢。它的计算结果为true
,因为size()
返回的是无符号类型
从未签名的代码< 0 > /CODE >中减去未签名的<代码> 1代码>,则得到一个大的正数,比“代码> 2”/代码>大。当然,
<代码>代码()/代码>返回一个<代码>:ST:::vector:siZeHype类型< /代码>类型,由C++标准保证为<代码>无符号< /代码>类型。< /P> 两种无符号
类型之间的区别在于其本身无符号
。您正在经历常见的环绕行为,且最终值大于2
在您的情况下,您应该重构为
更高的.size()>=2+更低的.size()
除非你真的知道自己在做什么,否则千万不要对无符号的类型使用减法。因为你在减去两个大小(即无符号)类型。粘贴代码而不是屏幕快照粘贴代码。我在这里放了一个屏幕截图,这样你就可以看到调试信息了。。我早该想到的。谢谢。@Bathsheba。。。几乎没有签名的类型属于Chuck Norris;)非常感谢。由于有用的重构建议,我接受了另一个答案。