Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个if语句的计算结果为true?_C++ - Fatal编程技术网

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;)非常感谢。由于有用的重构建议,我接受了另一个答案。