QVariant签名/未签名比较

时间:2016-04-15 07:21:12

标签: c++ qt unsigned signed

Qt Framework的QVariant类型提供了比较运算符<, <=, >, >=,但它们在有符号/无符号整数参数不匹配时工作意外:

QVariant(-1) < QVariant(0u) yields false
QVariant(0u) > QVariant(-1) yields false

有人知道这是一个错误,还是这个? 这个运算符总是在singed / unsigned mismatch上返回false吗?

是的,我正在使用Qt 5.6

1 个答案:

答案 0 :(得分:3)

QVariant(-1) < QVariant(0u)会调用intunsigned int的内置比较器。基本上,(int(-1) < uint(0)) == false(和here解释了原因)。

如果您需要不同的行为,请在使用toInt()或类似方法明确比较之前转换值:  QVariant(-1).toInt() < QVariant(0u).toInt() == true