为什么这个if语句被评估为真?

时间:2018-02-07 09:15:59

标签: c++

enter image description here

我只是不明白。第二个if语句被评估为true。您可以在图像中看到调试信息。如果我在if语句中使用createQuery("... where UUID = '917f116e-3447-4524-a959-ece721413f93'").list() //finds the right object ,它的行为与我期望的一样。为什么是这样?谢谢。

2 个答案:

答案 0 :(得分:6)

评估结果为md-scrollbar,因为true会返回{{3>},这是无符号类型。

当您从无符号size()中减去未签名的1时,会得到一个大的正数,当然大于0

答案 1 :(得分:5)

size()返回std::vector<int>::size_type类型,C ++标准保证该类型为unsigned类型。

两种unsigned类型之间的差异本身就是unsigned。您遇到常见的环绕行为,最终值大于2。

在您的情况下,您应该重构为highers.size() >= 2 + lowers.size()从不使用unsigned类型的减法,除非您真的知道自己在做什么。