2016-04-15 32 views
5

Il tipo QVariant del framework Qt offre agli operatori di confronto <, <=, >, >=, ma funzionano inaspettato firmato/unsigned argomenti interi mancata corrispondenza:QVariant firmato/i confronti senza segno

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

Qualcuno sa se questo è un bug, o è questo inteso? Questi operatori restituiscono sempre il falso in caso di mancata corrispondenza singhiozzo/non firmata?

Btw, sto usando Qt 5.6

risposta

3

QVariant(-1) < QVariant(0u) chiamerà incorporato comparatori di int e unsigned int. Fondamentalmente, (int(-1) < uint(0)) == false (e here è spiegato perché).

Se si vuole un comportamento diverso, convertono i valori prima del confronto in modo esplicito con toInt() o metodi simili: QVariant(-1).toInt() < QVariant(0u).toInt() == true