标签: c++ qt unsigned signed
Qt Framework的QVariant类型提供了比较运算符<, <=, >, >=,但它们在有符号/无符号整数参数不匹配时工作意外:
<, <=, >, >=
QVariant(-1) < QVariant(0u) yields false QVariant(0u) > QVariant(-1) yields false
有人知道这是一个错误,还是这个? 这个运算符总是在singed / unsigned mismatch上返回false吗?
答案 0 :(得分:3)
QVariant(-1) < QVariant(0u)会调用int和unsigned int的内置比较器。基本上,(int(-1) < uint(0)) == false(和here解释了原因)。
QVariant(-1) < QVariant(0u)
int
unsigned int
(int(-1) < uint(0)) == false
如果您需要不同的行为,请在使用toInt()或类似方法明确比较之前转换值: QVariant(-1).toInt() < QVariant(0u).toInt() == true
QVariant(-1).toInt() < QVariant(0u).toInt() == true